Отладка ошибки компоновщика C ++

Сначала я подробно расскажу о проблеме, с которой я столкнулся, а затем расскажу о интересных результатах, которые я получаю от nm, когда попытаюсь отладить проблему. Надеемся, что гуру НМ сможет интерпретировать эти результаты.

Я статически скомпилировал Casablanca C ++ REST SDK в библиотеку libcpprest.a. Это прекрасно работает, но когда я ссылаюсь на мой код с помощью команды:

/usr/bin/c++       CMakeFiles/dcodr_service.dir/dcodr_service.cc.o
CMakeFiles/dcodr_service.dir/viterbi.cc.o CMakeFiles/dcodr_service.dir/utils.cc.o
CMakeFiles/dcodr_service.dir/hmm.cc.o CMakeFiles/dcodr_service.dir/grammar.cc.o
-o dcodr_service  -L/home/user/casablanca/Release/Binaries -rdynamic -lfftw3f
-lcpprest -lcommon_utilities -lboost_program_options -lboost_regex -lboost_system
-lboost_filesystem -lboost_iostreams /opt/OpenBLAS/lib/libopenblas.a -Wl,
-rpath,/home/user/casablanca/Release/Binaries

Я получаю ошибку:

CMakeFiles/dcodr_service.dir/dcodr_service.cc.o: In function
`web::http::http_request::extract_json(bool)
const::{lambda(unsigned long)#1}::operator()(unsigned long) const':
/home/user/casablanca/Release/include/cpprest/http_msg.h:829:
undefined reference to `web::http::details::http_msg_base::_extract_json(bool)'

Похоже, что _extract_json (bool) определен в http_msg.cpp, который также, кажется, компилируется, когда я смотрю на подробный вывод создания libcpprest.a. Теперь, запустив nm -e —demangle libcpprest.a, я получаю следующие две строки (разделенные тысячами других):

00000000000015ee T web::http::details::http_msg_base::_extract_json(bool)
U web::http::details::http_msg_base::_extract_json(bool)

Я новичок в использовании nm, но мне кажется, что _extract_json (bool) находится как в разделе кода, так и в списке неопределенных символов. Есть ли лучший способ интерпретации результатов нм?

Кроме того, когда я компилирую cpprest как динамическую библиотеку и ссылаюсь на нее, все работает нормально, но по разным причинам мне приходится создавать статический двоичный файл dcodr_service.

РЕДАКТИРОВАТЬ:
В продолжение комментария от πάντα ῥεῖ, _extract_json (bool) используется в следующем контексте:

        return pplx::create_task(_m_impl->_get_data_available())
.then([impl, force](utility::size64_t) { return impl->_extract_json(force); });

То есть он используется внутри лямбда-функции. Может ли это вызвать ошибку компоновщика?

2

Решение

Задача ещё не решена.

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