gpt4 book ai didi

CMake 交叉编译目标 rpath

转载 作者:行者123 更新时间:2023-12-01 09:49:04 30 4
gpt4 key购买 nike

我正在使用 CMake 进行交叉编译。

在我的 CMakeLists.txt 中(用于编译和交叉编译):

set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
find_package(foo REQUIRED)
add_library(mylib SHARED ${SRCS})
target_link_libraries(mylib ${FOO_LIBRARIES)

在我的 toolchain.cmake 中:

set(CMAKE_CXX_FLAGS "... --sysroot=/path/to/sysroot/ ... ")
set(CMAKE_CXX_LINK_FLAGS "... --sysroot=/path/to/sysroot/ ... )
...
set(CMAKE_FIND_ROOT_PATH /path/to/sysroot)

考虑 foo 位于 /path/to/sysroot/usr/local/lib/foo.so,当我交叉编译 mylib/path/to/sysroot/usr/local/lib

我希望运行时路径是 /usr/local/lib 以反射(reflect)我的目标文件系统。

如果不在我的 CMakelists.txt 中定义硬编码的 CMAKE_INSTALL_RPATH 变量,我该如何做到这一点?

编辑:我在示例中使用了/usr/local/lib,但是 foo lib 位于不属于系统目录的特定文件夹中:/path/to/sysroot/usr/local/share/mypackage/lib/foo.so

最佳答案

CMake RPATH handling 上查看 wiki .

默认情况下,CMake 使用指向主机系统库位置 (/crosssdk/sysroot/usr/lib/) 的 RPATH 编译您的可执行文件,然后(我相信)在安装时(即。 make install) 它会编辑可执行文件中的 RPATH 以将其替换为适当的目标 RPATH(/usr/lib 或您拥有的任何位置)。我认为这个想法是,然后您可以更改共享库并在主机系统上执行输出,而不必每次都安装共享库和可执行文件。在我的例子中,我的主机是 x86,目标是 ARM,所以我告诉 CMake 将构建 RPATH 设置为与安装 RPATH 相同:

set_target_properties(mytarget PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE)

关于CMake 交叉编译目标 rpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30400362/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com