如何将curl/curlpp链接到CMake项目?OBS插件链接curlpp报错解决
问题排查
你的配置存在两处核心遗漏:
- FindCurlpp.cmake未补充库文件查找逻辑:当前写的查找脚本只搜索了curlpp的头文件路径,完全没有查找libcurlpp库文件的逻辑,导致
Curlpp_LIBRARIES变量全程为空,后续链接阶段无法识别到curlpp库。 - CMakeLists.txt未加入curlpp库的链接配置:即使正确拿到了curlpp的库路径,你也没有在链接列表中添加curlpp库,自然不会把curlpp的相关符号编译到插件的so文件中。
修复步骤
1. 修改external/FindCurlpp.cmake,补充库查找逻辑
修改后的完整文件如下:
find_path(Curlpp_INCLUDE_DIR NAMES "curlpp/cURLpp.hpp" "curlpp/Easy.hpp" "curlpp/Options.hpp" "curlpp/Exception.hpp" PATHS /usr/include /usr/share/include ~/Downloads/curlpp-0.8.1/include DOC "Curlpp include directory") # 新增curlpp库文件查找逻辑 find_library(Curlpp_LIBRARY NAMES curlpp libcurlpp PATHS /usr/lib /usr/lib64 ~/Downloads/curlpp-0.8.1/build/lib DOC "Curlpp library path") include(FindPackageHandleStandardArgs) # 补充库文件为必填检查项 find_package_handle_standard_args(Curlpp DEFAULT_MSG Curlpp_INCLUDE_DIR Curlpp_LIBRARY) if (Curlpp_FOUND) set(Curlpp_INCLUDE_DIRS ${Curlpp_INCLUDE_DIR} CACHE STRING "Curlpp include directories") # 赋值库列表变量供后续链接使用 set(Curlpp_LIBRARIES ${Curlpp_LIBRARY} CACHE STRING "Curlpp libraries") get_filename_component(Curlpp_LIBRARY_DIR ${Curlpp_LIBRARY} DIRECTORY CACHE STRING "Curlpp library directory") endif()
2. 修改CMakeLists.txt,添加curlpp链接配置
找到target_link_libraries配置块,新增curlpp库的链接项:
target_link_libraries(${CMAKE_PROJECT_NAME} ${LIBOBS_LIBRARIES} CURL::libcurl ${Curlpp_LIBRARIES} # 新增这一行 ${Onnxruntime_LIBRARIES} ${OpenCV_LIBRARIES} )
3. 重新编译验证
删除原有build目录,重新执行cmake配置、编译、安装流程即可。如果你的curlpp是自行编译没有安装到系统路径,cmake配置时可以添加-DCurlpp_ROOT=~/Downloads/curlpp-0.8.1参数指定curlpp的根路径,帮助查找脚本定位文件。
内容的提问来源于stack exchange,提问作者Maed Hamed
相关产品推荐
相关产品推荐

