Сбой компиляции - нет #include - boost - PullRequest
0 голосов
/ 19 марта 2010

Я пытаюсь скомпилировать стороннюю библиотеку, но g ++ жалуется на следующую строку:

typedef boost::shared_ptr<MessageConsumer> MessageConsumerPtr;

Странно то, что в файле нет директивы #include - и, очевидно, так и должно быть; Есть около 60 файлов с одинаковыми (или очень похожими) проблемами. Ясно, что если бы существовала директива #include, ссылающаяся на соответствующий заголовок надстройки, она была бы скомпилирована без ошибок.

Мой вопрос: как я могу заставить g ++ каким-то образом автоматически найти соответствующий символ (во всех случаях этой проблемы это пространство имен, которое не может быть найдено - обычно std:: или boost::) любым из них обработка соответствующего заголовка (или какого-либо другого механизма).

Спасибо.

Редактировать

Мой текущий вызов g ++ выглядит так:

g++ -fPIC -O3 -DUSING_PCH -D_REENTRANT -I/usr/include/boost -I./ -c MessageInterpreter.cpp -o MessageInterpreter.o

Ответы [ 3 ]

2 голосов
/ 19 марта 2010

Вы можете использовать параметр командной строки -include:

g++ -include boost/shared_ptr.hpp ...

со страницы руководства:

-включить файл Файл процесса, как если бы "#include" file "" отображался в первой строке первичный исходный файл. Тем не менее, первый каталог искал файл - это рабочий каталог препроцессора, а не каталог, содержащий основной исходный файл. Если не найден там, это ищется в оставшейся части поиска "#include" ... "" цепь как обычно.

1 голос
/ 19 марта 2010

Создайте свой собственный файл оболочки .h, который включает в себя расширение .h, а затем сломанный .h.

Или (очень хрупкий) убедитесь, что вы предшествуете каждому использованию сломанного .h с усилением .h.

0 голосов
/ 19 марта 2010

Возможно, сторонняя библиотека спроектирована таким образом, что вы всегда должны включать определенный "основной" заголовочный файл, чтобы получить правильные зависимости.

В противном случае вы можете добавить #include <boost/shared_ptr.hpp> перед включением стороннего заголовочного файла с сообщением об ошибке.

...