boost :: system :: generic_category не определена после статически связанной

Я создаю разделяемую библиотеку, которая статически связана с надстройкой, как показано ниже:

/usr/bin/c++  -fPIC  -Wall -Wshadow -g -Wl,-Bstatic -lboost_date_time -lboost_thread -lboost_filesystem -lboost_system -Wl,-Bdynamic -ldl -shared -Wl,-soname,liboms_rocketmq.so -o ../lib/liboms_rocketmq.so

Проблема заключается в том, что при открытии этой библиотеки в Ubuntu 16.04 символы, которые должны были быть статически связаны, не определены (см. Следующий вывод команды: U), поскольку символ можно найти в текстовой области libboost_system.so, как проверено в последнем выводе команды ,

Например:

nm ../liboms_rocketmq.so | grep _ZN5boost6system16generic_categoryEv
U _ZN5boost6system16generic_categoryEv

nm /usr/local/lib/libboost_system.so | grep _ZN5boost6system16generic_categoryEv
00000000000013e0 T _ZN5boost6system16generic_categoryEv

Любая идея, почему статическое связывание не работает, как ожидалось? ака, вставив символ в текстовую область нашей общей библиотеки.

0

Решение

Выяснил проблему: нам нужно поместить эти зависимые статические библиотеки в конце (после нашего собственного кода) как раз перед -pthreads, который должен быть последним флагом ссылки.

0

Другие решения

Других решений пока нет …