Настройка : библиотека com
использует библиотеку http
, которая в пространстве имен http
содержит класс ConnectionPool
. ConnectionPool
имеет метод boost::network::http::client::response post(boost::network::http::client::request req);
, где http_request boost::network::http::client::request
env :
c++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
GNU Make 4.1
Cmake 3.15.3
Файлы :
Так объявляется функция
boost::network::http::client::response
post(boost::network::http::client::request req, unsigned timeoutMs);
post()
называется так в com
connectionPool.post(http_request, 4000);
У меня странная проблема с конфигурацией CMake: при использовании post
в com
linker ( ld) возвращает 1 с ошибкой:
undefined reference to http::HTTPConnectionPool::post(boost::network::http::basic_request<boost::network::http::tags::http_default_8bit_udp_resolve>)'
Однако, если я удаляю запрос на повышение из подписи post
, все компилируется и работает просто отлично. Исходя из этого, я могу сделать вывод, что проблема заключается в связывании boost
с библиотекой http
, но я не могу ее найти, поэтому вот CMakeFile
http / CMakeLists.txt
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} http_srcs)
add_library(http ${http_srcs})
target_link_libraries(http PRIVATE pthread ${Boost_LIBRARIES} cppnetlib-uri)
com / CMakeFiles.txt
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} com_srcs)
add_library(com ${com_srcs})
target_link_libraries(com PRIVATE jsoncpp cppnetlib-uri ${OpenCV_LIBRARIES} ${Boost_LIBRARIES})
связывая их вместе в main / CMakeLists.txt
# some code skipped there
target_link_libraries(main
config api rdm anm web com http dab log jsoncpp
${Boost_LIBRARIES}
)
Я уже пробовал:
- переименовываем пространство имен из http во что-то другое, чтобы проверить, возможно ли столкновение
- ссылка http на com в
com/CMakeLists.txt
- изменить порядок в main / CMakeLists.txt target_link_libraries ()
- этот ответ { ссылка }
Другие функции и конструкторы из ConnectionPool
работают нормально, проблема возникает только при использовании запроса на повышение в качестве одного из параметров.
Странно то, что функция с такой же сигнатурой работает в com
.