2015-12-15 2 views
1

Я получаю static ошибки ссылки в библиотеку boost не только заголовка. Давайте разрешим это вместе:undefined ссылка на boost library

Окончательный двоичный файл должен быть построен с использованием библиотек (например, libbasemainif.a), отдельно построенных как более высокие уровни. Один из этих слоев использует boost::filesystem.

Посмотрите упрощенному vesrion из g++ команды:

g++ /mylis/1.a /mylibs/2.a 
-L/myboost/Linux-x86_64/lib64 
-Wl,-rpath,/myboost/Linux-x86_64/lib64 -Wl,-Bstatic 
-lboost_thread-mt -lboost_system-mt -lboost_filesystem-mt -lboost_date_time-mt 
-Wl,-Bdynamic 
-Wl,-rpath,/myinstall/usr/local/lib64 -L/myinstall/usr/local/lib64 -Wl, 
-Bstatic -lmyblahblah-static -Wl,-Bdynamic **-lbasemainif** -lbaseif -ldl -rdynamic -lz -lrt 
-L/mypackage1/Linux-x86_64/debug/lib -L /mypackage2/18.1/Linux-x86_64/debug/lib -lpthread -Wl,-rpath,$ORIGIN/../lib64 

и это ошибка:

/blahblah/lib/libbasemainif.a(errorreportfile.o): 
In function `boost::filesystem3::remove(boost::filesystem3::path const&, boost::system::error_code&)': 

/myboost/Linux-x86_64/include/boost/filesystem/v3/operations.hpp:411: 
undefined reference to boost::filesystem3::detail::remove(boost::filesystem3::path const&, boost::system::error_code*)' 
collect2: ld returned 1 exit status 
  • Если удалить -Wl,-Bstatic команда г ++ выполняет successfully.But это не вариант в производстве.
  • Доступен libboost_filesystem.a. И все латиницы в каждом слое использовали увеличение из того же места.

Не могли бы вы рассказать мне, почему я получаю эту ошибку? Спасибо

+0

похоже, что есть вызов к деталям :: удалить с последним аргументом в качестве boost :: system :: error_code *, но определение не предусмотрено для того, чтобы вызвать неопределенную ссылку. boost :: filesystem3 :: remove должен быть перегруженной функцией, и, кажется, существует определение для только одного из них с boost :: system :: error_code & как последним параметром. Попробуйте предоставить второе определение. –

ответ

2

Вы должны перейти в библиотеку gcc, которая реализует функцию после часть, которая ссылается на нее. Что-то вроде: -lbasemainif -lboost_filesystem-mt. Это то, как gcc-компоновщик разрешает зависимости.

Here - подробный подробное объяснение.

+0

Я вернусь! (Arnold schwarzenegger) – rahman

Смежные вопросы