azure-iot-sdk -c交叉编译链接器问题:ld:找不到-luuid

时间:2018-02-12 00:50:51

标签: c linux azure gcc

一般情况下,我尝试遵循cross compile azure iot sdk 中的指南。

以下是toolchain-bb.cmake

azure-iot-sdk-c/build_all/linux的内容
INCLUDE(CMakeForceCompiler)

SET(CMAKE_SYSTEM_NAME Linux)     # this one is important
SET(CMAKE_SYSTEM_VERSION 1)     # this one not so much

SET(CMAKE_C_COMPILER /mnt/yocto/bsp-yocto/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_FIND_ROOT_PATH /mnt/yocto/yocto_repo/build/arago-tmp-external-linaro-toolchain/sysroots/am57xx-evm/usr)

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

# openssl directories
SET(OPENSSL_ROOT_DIR /mnt/yocto/yocto_repo/build/tmp/sysroots/am57xx-evm/usr/lib/)
SET(OPENSSL_INCLUDE_DIR /mnt/yocto/yocto_repo/build/tmp/sysroots/am57xx-evm/usr/include/)

SET(CURL_LIBRARY /mnt/yocto/yocto_repo/build/tmp/sysroots/am57xx-evm/usr/lib/libcurl.a)
SET(CURL_INCLUDE_DIR /mnt/yocto/yocto_repo/build/tmp/sysroots/am57xx-evm/usr/include/curl/)

SET(UUID_LIBRARY_DIRS /mnt/yocto/yocto_repo/build/arago-tmp-external-linaro-toolchain/sysroots/am57xx-evm/usr/lib)

azure-iot-sdk-c/build_all/linux/我使用以下命令:

sudo ./build.sh --toolchain-file toolchain-bb.cmake

这是输出:

Linking C static library libumqtt.a
Linking C executable iot_c_utility
[ 68%] Built target umqtt
Scanning dependencies of target iothub_client_mqtt_transport
Scanning dependencies of target iothub_client_mqtt_ws_transport
/mnt/yocto/bsp-yocto/gcc-linaro-5.3-2016.02-x86_64_arm-linux-
gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/5.3.1/../../../../arm-linux-
gnueabihf/bin/ld: cannot find -luuid
collect2: error: ld returned 1 exit status
make[2]: *** [c-utility/samples/iot_c_utility/iot_c_utility] Error 1
make[1]: *** [c-
utility/samples/iot_c_utility/CMakeFiles/iot_c_utility.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

在上面列出的StackOverflow链接中,它提到--sysroot非常重要。但是,当我指定--sysroot时,如下所示,构建很早就失败了(即大约[5%]进入构建)。

 sudo ./build.sh --toolchain-file toolchain-bb.cmake -cl --sysroot=/mnt/yocto/bsp-yocto/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/lib

重要提示:libuuid.a存在于:

/mnt/yocto/yocto_repo/build/arago-tmp-external-linaro-toolchain/sysroots/am57xx-evm/usr/lib

2 个答案:

答案 0 :(得分:0)

你应该包括这一行:

set(compileOption_C "--sysroot=<your_path_to_sysroot>")

确保您已在主机系统中安装了libuuid

sudo apt-get install uuid-dev

答案 1 :(得分:0)

我不熟悉您正在使用的特定工具链,但通常您不会在sysroot路径上使用/ lib。您必须指定一个sysroot或链接器将尝试链接主机库而不是工具链中的那些。

关于您的第一个问题,请检查您的工具链以查看libuuid.a是否存在。如果没有,请查看您的设备上是否存在。您可以随时从那里复制到您的工具链。它可能需要在/mnt/yocto/bsp-yocto/gcc-linaro-5.3-2016.02-x86_64_arm-linux-gnueabihf/usr/lib之类的地方。

如果不了解您正在使用的工具链,则很难更精确。