首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CMake工具链文件交叉编译Azure IoTHub SDK时无法链接libuuid。

使用CMake工具链文件交叉编译Azure IoTHub SDK时无法链接libuuid。
EN

Stack Overflow用户
提问于 2018-11-11 07:42:15
回答 1查看 731关注 0票数 0

我不知道如何正确地编写CMake工具链文件以成功构建AzureAzureSDKv1.2.10。

这是我的命令:

代码语言:javascript
复制
azure-iot-sdk-c/build_all/linux# ./build.sh --no-amqp --no-http --no_uploadtoblob --no-logging --toolchain-file mytoolchain.cmake

下面是构建结果,ld找不到-luuid:

代码语言:javascript
复制
Scanning dependencies of target iothub_convenience_sample
[ 69%] Building C object iothub_client/samples/iothub_convenience_sample/CMakeFiles/iothub_convenience_sample.dir/iothub_convenience_sample.c.o
[ 70%] Building C object iothub_client/samples/iothub_convenience_sample/CMakeFiles/iothub_convenience_sample.dir/__/__/__/certs/certs.c.o
[ 71%] Linking C executable iothub_convenience_sample
/usr/local/bin/compile_tool/arm-2010q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -luuid
collect2: ld returned 1 exit status
iothub_client/samples/iothub_convenience_sample/CMakeFiles/iothub_convenience_sample.dir/build.make:128: recipe for target 'iothub_client/samples/iothub_convenience_sample/iothub_convenience_sample' failed
make[2]: *** [iothub_client/samples/iothub_convenience_sample/iothub_convenience_sample] Error 1
CMakeFiles/Makefile2:1327: recipe for target 'iothub_client/samples/iothub_convenience_sample/CMakeFiles/iothub_convenience_sample.dir/all' failed
make[1]: *** [iothub_client/samples/iothub_convenience_sample/CMakeFiles/iothub_convenience_sample.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

下面是我的工具链文件:

代码语言:javascript
复制
INCLUDE(CMakeForceCompiler)

SET(CMAKE_SYSTEM_NAME Linux)    
SET(CMAKE_SYSTEM_VERSION 1)    

SET(CMAKE_C_COMPILER /usr/local/bin/compile_tool/arm-2010q1/bin/arm-none-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER /usr/local/bin/compile_tool/arm-2010q1/bin/arm-none-linux-gnueabi-g++)

# set OpenSSL path
SET(OPENSSL_SSL_LIBRARY /myspace/application/openssl/libssl.so)
SET(OPENSSL_CRYPTO_LIBRARY /myspace/application/openssl/libcrypto.so)
SET(OPENSSL_INCLUDE_DIR /myspace/application/openssl/include)

# I can use INCLUDE_DIRECTORIES to find uuid.h
INCLUDE_DIRECTORIES(/myspace/application/libuuid/include)
# But I can't link libuuid by setting CMAKE_FIND_ROOT_PATH... Why?
SET(CMAKE_FIND_ROOT_PATH /myspace/application/libuuid/lib)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

我下载了libuuid源代码并将其构建到/myspace/application/libuuid/lib/

代码语言:javascript
复制
root@my-pc:/myspace/application/libuuid/lib# ls -l
total 116
-rw-r--r-- 1 root root 63258 十一  9 13:57 libuuid.a
-rwxr-xr-x 1 root root   953 十一  9 13:57 libuuid.la
lrwxrwxrwx 1 root root    16 十一  9 13:57 libuuid.so -> libuuid.so.1.0.0
lrwxrwxrwx 1 root root    16 十一  9 13:57 libuuid.so.1 -> libuuid.so.1.0.0
-rwxr-xr-x 1 root root 41893 十一  9 13:57 libuuid.so.1.0.0
drwxr-xr-x 2 root root  4096 十一  9 13:57 pkgconfig

但是,如果我手动将libuuid.so.1.0.0libuuid.so.1复制到交叉编译器(/usr/local/bin/compile_tool/arm-2010q1/arm-none-linux-gnueabi/lib)中的路径,它可以成功地链接libuuid。

所以,我想我的工具链文件一定有问题。我尝试过使用CMAKE_EXE_LINKER_FLAGS,CMAKE_SHARED_LINKER_FLAGS,link_directories,和link_libraries,,所有这些都失败了。

我希望有人能教我如何改进我的工具链文件。谢谢!

PS。我不想修改Azure IoTHub源代码,以保持它的不变和易于维护。

EN

回答 1

Stack Overflow用户

发布于 2022-09-20 11:08:41

我已经在交叉编译器默认路径中安装了编译后的libuuid库。我使用aarch64-linux-gnu,所以默认路径是/usr/aarch64-linux-gnu/

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

https://stackoverflow.com/questions/53246769

复制
相关文章

相似问题

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