设置:库com使用http名称空间http中包含类的库ConnectionPool。ConnectionPool有方法boost::network::http::client::response post(boost::network::http::client::request req);
http_request 在哪里boost::network::http::client::request
环境:
c++ (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
GNU Make 4.1
Cmake 3.15.3
文件:
- Boost 如何包含在粘贴箱中
这就是函数的声明方式
boost::network::http::client::response
post(boost::network::http::client::request req, unsigned timeoutMs);
post()在 com 中是这样称呼的
connectionPool.post(http_request, 4000);
我对 CMake 配置有一个奇怪的问题:post在com链接器 (ld) 中使用时返回 1 并出现错误:
undefined reference to http::HTTPConnectionPool::post(boost::network::http::basic_request<boost::network::http::tags::http_default_8bit_udp_resolve>)'
但是,如果我从 的签名中删除 boost 请求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 in
com/CMakeLists.txt - 在 main/CMakeLists.txt target_link_libraries() 中更改顺序
- 这个答案https://stackoverflow.com/a/12205075/6429920
另一个函数和构造函数ConnectionPool工作正常,只有在使用 boost request 作为参数之一时才会出现问题。
奇怪的是具有相同签名的功能适用于com.