Boost logging - получение неразрешенного символа

Я новичок в создании и продвижении, поэтому в этом вопросе может отсутствовать что-то очевидное:

Я строю проект с помощью cmake на Linux (Ubuntu), и я пытаюсь использовать логирование в этом проекте. Вот что я делаю, чтобы сгенерировать Makefile:

rm CMakeCache.txt
cmake ../ -DCMAKE_EXE_LINKER_FLAGS="-lboost_log -lboost_log_setup -lpthread -std=c++11" -DCMAKE_SHARED_LINKER_FLAGS="-lboost_log_setup -lboost_log -lpthread" -DCMAKE_MODULE_LINKER_FLAGS="-lboost_log_setup -lboost_log -lpthread" -DCMAKE_CXX_FLAGS="-DBOOST_LOG_DYN_LINK -std=c++11"

Компиляция проходит нормально. (Некоторые из этих флагов могут быть излишними - мне нужен только CMAKE_EXE_LINKER_FLAGS).

Когда я запускаю исполняемый файл, я получаю следующую неразрешенную ссылку:

-- ImportError: /home/mranga/gr-msod-sensor/gr-msod_sensor/build/lib/libgnuradio-msod_sensor.so: undefined symbol: _ZN5boost3log11v2_mt_posix3aux25unhandled_exception_countEv

Какие флаги мне не хватает? Моя библиотека повышения настроена, и LD_LIBRARY_PATH указывает на правильное местоположение.

Когда я вручную собираю тестовую программу, используя те же флаги компоновщика, она компилируется и работает нормально, поэтому boost установлен правильно. Надеюсь, я не пропустил очевидное.

(Перенес вопрос из списка рассылки GNU Radio - извините, если вы читаете этот пост во второй раз).

2 ответа

Решение

Похоже, вы ссылаетесь на не многопоточную версию:

-lboost_log

но компоновщик во время выполнения, похоже, явно ищет многопоточный вариант ( сайт Boost doc на этом):

_ZN5boost3log11v2_mt_posix3aux25unhandled_exception_countEv
                  ^^

Таким образом, я предполагаю, что вы должны попробовать связаться с

-lboost_log_mt

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

Я считаю, что порядок библиотек в командной строке компоновщика в -DCMAKE_EXE_LINKER_FLAGS это неверно. boost_log_setup зависит от boost_log, поэтому boost_log_setup должен идти первым.

Другие вопросы по тегам