首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构建azure-iot-sdk-c示例代码时与libcurl相关的链接错误

构建azure-iot-sdk-c示例代码时与libcurl相关的链接错误
EN

Stack Overflow用户
提问于 2019-11-14 23:04:01
回答 2查看 399关注 0票数 0

在使用下面的toolchain.cmake配置构建azure-iot-sdk-c示例代码时,我遇到了一个问题。

代码语言:javascript
复制
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)

下面是我在控制台上得到的错误:

代码语言:javascript
复制
/sysroot/bin/ld: cannot find -lcurl

在编译azure-sdk库的过程中,cmake如期采用了CURL_INCLUDE_DIR和CURL_LIBRARY路径。但是在构建示例代码的过程中,它是failing with -lcurl not found error。该问题是由于CMake正在查找错误的目录(即sysroot/usr/lib/),而不是搜索libcurl。所以在内部,CURL_LIBRARY是从toolchain.cmake传入的。

如何让CMakeCURL_LIBRARY目录中查找示例代码二进制文件的链接以解决此问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-18 23:52:35

这个问题是因为在azure-iot-sdk示例代码中,他们在找到curl包之前直接引用了curl库,.which类似于他们应该在target_link_libraries(azure_sample_bin lcurl)之前做的find_package(CURL)。我能够在azure-iot-sdk-c/CMakeLists.txt中添加以下代码来修复它

代码语言:javascript
复制
add_library( curl SHARED IMPORTED)
set_property(TARGET curl PROPERTY IMPORTED_LOCATION "${CURL_LIBRARY}")

此外,如果我们停止构建示例codes.This可以通过使skip_samples=ON .But来完成此问题,即使此标志在azure-iot-sdk-c/CMakeLists.txt中默认为ON,它在构建时不会产生任何影响(可能是因为此行代码位于错误的位置).we仍然可以通过在运行cmake时传递skip_samples:BOOL=ON来避免构建示例代码,如下所示

代码语言:javascript
复制
cmake "-Dskip_samples:BOOL=ON"  path_to_azure_sdk/
票数 0
EN

Stack Overflow用户

发布于 2019-11-16 07:30:33

我认为你需要在你的交叉编译工具链文件中包含CMAKE_FIND_ROOT_PATH。这里有一个SDK的交叉编译的工作示例,尽管是在Docker容器中执行的:https://github.com/Azure/azure-iot-sdk-c/blob/master/samples/dockerbuilds/RaspberryPi/Dockerfile。此示例还构建了所有前提条件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58859841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档