Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未找到cmake交叉编译arm过渡依赖项库 我有一个C++程序,我为Jethon TX2交叉编译。 此程序的结构如下所示: root | - module1 | | - CMakeLists.txt | - module2 | | - CMakeLists.txt | - CMakeLists.txt | - toolchain.cmake_Cmake - Fatal编程技术网

未找到cmake交叉编译arm过渡依赖项库 我有一个C++程序,我为Jethon TX2交叉编译。 此程序的结构如下所示: root | - module1 | | - CMakeLists.txt | - module2 | | - CMakeLists.txt | - CMakeLists.txt | - toolchain.cmake

未找到cmake交叉编译arm过渡依赖项库 我有一个C++程序,我为Jethon TX2交叉编译。 此程序的结构如下所示: root | - module1 | | - CMakeLists.txt | - module2 | | - CMakeLists.txt | - CMakeLists.txt | - toolchain.cmake,cmake,Cmake,每个模块子文件夹创建一个共享库,我的主要目标链接该库。 jetson的工具链是 SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1) SET(CROSS_COMPILE "jetson") SET(CMAKE_C_COMPILER aarch64-linux-gnu-gcc-5) SET(CMAKE_CXX_COMPILER aarch64-linux-gnu-gcc-5) SET(CMAKE_SYSROOT /usr/loc

每个模块子文件夹创建一个共享库,我的主要目标链接该库。
jetson的工具链是

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)

SET(CROSS_COMPILE "jetson")

SET(CMAKE_C_COMPILER   aarch64-linux-gnu-gcc-5)
SET(CMAKE_CXX_COMPILER aarch64-linux-gnu-gcc-5)

SET(CMAKE_SYSROOT /usr/local/sysroot_jetson)

set(ENV{PKG_CONFIG_DIR} "")
set(ENV{PKG_CONFIG_LIBDIR} "${CMAKE_SYSROOT}/usr/lib/pkgconfig:${CMAKE_SYSROOT}/usr/share/pkgconfig:${CMAKE_SYSROOT}/usr/local/lib/pkgconfig:${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig")
set(ENV{PKG_CONFIG_SYSROOT_DIR} ${CMAKE_SYSROOT})

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(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
到目前为止,我还没有遇到任何问题,因为我需要包含一个新模块,该模块具有tensorflow及其依赖性

我已经在/usr/local/lib中安装了tensorflow_cc libs。 这个TF libs是使用GPU支持编译的,因此链接了jetson上安装的cuda-9.0中的许多内容

模块的CMakeLists.txt仅链接到tensorflow,如下所示。
这当然是简化的

target_link_libraries(${LIB_NAME} -ltensorflow_cc)
只要我不交叉编译,它就可以正常工作。
直接在jetson或我的主机上编译效果很好

但是添加工具链是行不通的。
编译时,tensorflow模块的共享库实际上编译得很好,但是链接最终目标只输出以下内容

/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libcublas.so.9.0, needed by /usr/local/sysroot_jetson/usr/local/lib/libtensorflow_cc.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libcusolver.so.9.0, needed by /usr/local/sysroot_jetson/usr/local/lib/libtensorflow_cc.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libcudart.so.9.0, needed by /usr/local/sysroot_jetson/usr/local/lib/libtensorflow_cc.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libcuda.so.1, needed by /usr/local/sysroot_jetson/usr/local/lib//libtensorflow_framework.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libcufft.so.9.0, needed by /usr/local/sysroot_jetson/usr/local/lib//libtensorflow_framework.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libcurand.so.9.0, needed by /usr/local/sysroot_jetson/usr/local/lib//libtensorflow_framework.so, not found (try using -rpath or -rpath-link)
/usr/local/sysroot_jetson/usr/local/lib//libtensorflow_framework.so: undefined reference to `cublasDrotm_v2@libcublas.so.9.0'
/usr/local/sysroot_jetson/usr/local/lib/libtensorflow_cc.so: undefined reference to `cusolverDnZgeqrf@libcusolver.so.9.0'
/usr/local/sysroot_jetson/usr/local/lib//libtensorflow_framework.so: undefined reference to `cuEventElapsedTime'
......
所有必需的文件都可以在sysroot中找到,地址为/usr/local/sysroot\u jetson/usr/local/cuda/lib64

我的理解是,/etc/ld.so.conf.d中设置的所有ld额外路径都不会被使用或读取。
我应该能够指示cmake查找这些额外的搜索路径,但我尝试了所有我能阅读的内容,没有任何更改。
pkg config有所有cuda库的文件,所以我可以

pkg_check_modules(cudaall REQUIRED cuda-9.0 cublas-9.0 cusolver-9.0 cudart-9.0 cufft-9.0 curand-9.0)
它找到了它们,但只是失败了

/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: cannot find -lcublas
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: cannot find -lcusolver
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: cannot find -lcudart
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: cannot find -lcufft
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: cannot find -lcurand
添加一个-L${CMAKE_SYSROOT}/usr/local/cuda-9.0/lib64(我不应该这样做)只是螺旋式地添加到其他找不到的nvidia LIB

/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libnvrm_gpu.so, needed by /usr/local/sysroot_jetson/usr/lib/aarch64-linux-gnu/libcuda.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libnvrm.so, needed by /usr/local/sysroot_jetson/usr/lib/aarch64-linux-gnu/libcuda.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libnvidia-fatbinaryloader.so.28.2.1, needed by /usr/local/sysroot_jetson/usr/lib/aarch64-linux-gnu/libcuda.so, not found (try using -rpath or -rpath-link)

我真的不明白的是,为什么cmake关心哪个libs tensorflow\u cc.so链接?
这不是运行时的问题吗?
我不能只链接到tensorflow_cc.so,在编译时关心它的依赖关系吗

这让我很困惑


任何洞察都将不胜感激。

“为什么cmake关心哪些libs tensorflow\u cc.so链接?”-cmake什么都不关心。看,警告来自链接器(
../aarch64 linux gnu/bin/ld
),而不是来自CMake。当链接到共享库时,链接器也链接到它们所依赖的所有库。所以它需要找到那些依赖的库。而且您的RPATH设置不允许链接器查找这些库。请注意,该警告消息没有将
-L
选项列为问题的解决方案。好的,这很有意义,但我如何指示交叉编译环境中链接器的其他路径执行与/etc/ld.so.conf.d中相同的任务?