【问题标题】:How to pass sysroot from Yocto to cmake如何将 sysroot 从 Yocto 传递给 cmake
【发布时间】:2019-05-08 15:55:37
【问题描述】:

我正在使用 Yocto 配方来构建一个 cmake 项目。在 Yocto 环境中,我确认 --sysroot=my-app/recipe-sysroot 和所有依赖库都已安装到该位置。在我的CMakeList.txt 中,我设置了link_directories(/usr/lib),但是在构建时出现错误消息,指示找不到依赖库。 有谁知道如何将 Yocto sysroot 环境传递给 cmake?

我的食谱, 继承cmake

DEPENDS = "\
        azure-iot-sdk-c \
        openssl \
        zlib \
        curl \
        boost \
        parson \
        gtest \
"

S = "${WORKDIR}/git"
B = "${WORKDIR}/build"

EXTRA_OECMAKE = "\
        -DCMAKE_BUILD_TYPE=Debug \
        -DBUILD_SAMPLES=ON \
        -DBUILD_TESTS=ON \
        -DBUILD_TOOLS=ON \
"

FILES_${PN}-staticdev = "${libdir}/*.a"
FILES_${PN} += "${libdir}/*.so"
FILES_SOLIBSDEV = ""
INSANE_SKIP_${PN} += "dev-so rpaths"

如果我在我的 CMakeList 中设置真实路径,它会起作用,

set(LIBRARY_DIR "${CMAKE_CURRENT_LIST_DIR}/../recipe-sysroot/usr/lib")
set(STATIC_LIBRARY ${LIBRARY_DIR}/libiothub_client.a)

但是如果我根据sysroot设置相关路径就不行了,

set(LIBRARY_DIR "/usr/lib")

【问题讨论】:

  • 请发布您的错误信息。这是 CMake“配置”过程中的错误还是编译器/链接器错误?
  • /usr/lib/libmy.a 找不到。似乎 Yocto 的 sysroot 定义不适用于 cmake
  • Yocto 什么版本?
  • 你的食谱是否继承了 cmake 类?
  • 问题是你使用的是主机系统link_directories(/usr/lib)。您应该使用find_library() 或其他一些尊重 Yocto sysroot 的机制。您的 CMakeList sn-p 建议您正在硬编码要使用的库的绝对路径。您可以使用 -llibiothub_client 链接选项并让链接器搜索库。

标签: cmake yocto


【解决方案1】:

不要这样做:

set(LIBRARY_DIR "${CMAKE_CURRENT_LIST_DIR}/../recipe-sysroot/usr/lib")

通常不需要在你的 cmake 中包含任何 yocto 特定信息。而是添加

include(GNUInstallDirs)

在你的食谱中添加:

inherit cmake

如果您的 cmake 正确安装了静态库和头文件,例如:

install (TARGETS <yourtarget> DESTINATION ${CMAKE_INSTALL_LIBDIR})
file(GLOB HEADERS include/*.h)
install(FILES ${HEADERS} DESTINATION  ${CMAKE_INSTALL_INCLUDEDIR})

如果您不使用 cmake 安装静态库,则我的上述建议应该有效,您必须在您的包配方中定义一个 do_install 任务。例如

do_install() {
   install -m 0755 -d ${D}${libdir} 
   install -m 0755 ${B}/test-staticlibrary.a  ${D}/${libdir}
}

如果您发布您的 cmake 文件,我可以进一步帮助您

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多