【发布时间】:2019-11-14 15:04:00
【问题描述】:
我在使用以下 toolchain.cmake 配置构建 azure-iot-sdk-c 示例代码时遇到了问题。
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER arm-linux-gcc)
SET(CMAKE_CXX_COMPILER arm-linux-g++)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CURL_INCLUDE_DIR /curl_path/include/)
SET(CURL_LIBRARY /curl_path/lib/libcurl.so)
以下是我在控制台上遇到的错误:
/sysroot/bin/ld: cannot find -lcurl
在 azure-sdk 库的编译过程中,cmake 按预期采用 CURL_INCLUDE_DIR 和 CURL_LIBRARY 路径。但是在构建 azure-sdk repo 中的示例代码期间,它是failing with -lcurl not found error。这个问题是由于 CMake 正在寻找错误的目录(即sysroot/usr/lib/)而不是搜索 libcurl。所以里面的CURL_LIBRARY是从toolchain.cmake传递过来的。
我如何让CMake 查看CURL_LIBRARY 目录以链接示例代码二进制文件以解决此问题?
【问题讨论】:
-
您的 CMake 如何与 curl 库链接? CMake 是否调用
find_library()或其他命令来定位 curl 库(可能使用或覆盖您定义的CURL_LIBRARY变量)?请显示您的 CMake 代码的其余部分。 -
@squareskittles cmakelist.txt 代码添加
-
请同时发布您将目标链接到 curl 库的 CMake 代码。 IE。拨打
target_link_libraries()或类似电话。如果你的find_package()调用运行,CURL_LIBRARIES变量应该包含你的 curl 库的路径。 -
@squareskittles 使用 target_link_libraries 编辑
-
@squareskittles 我也在想这个问题与 ld 相关,应该有一些标志或某种方式告诉链接器在应该从 toolchain.cmake 文件设置的特定路径中查找 libcurl .any对此有什么想法?
标签: cmake ld azure-iot-hub azure-iot-sdk