gcc链接错误:即使使用cmake设置rpath,cmake交叉编译也无法找到辅助库

时间:2017-06-23 07:31:54

标签: c++ linux gcc cmake cross-compiling

我正在尝试交叉编译arm程序,这取决于很多库。明确包括lib * .so可以解决这个问题,但它并不合适,在我的项目中几乎是不可能的。

简化问题如下所示,例如

mainexe -> libcv_highgui.so(founded) -> libjpeg.so(missing)

但是在连接时,我收到了错误:

ld: warning: libjpeg.so.8, needed by /opt/tkfs/usr/local/lib/libopencv_highgui.so.2.4.10, not found (try using -rpath or -rpath-link)

我添加了rpath,我检查了./build/CMakeFiles/mainexe.dir/link.txt,rpath已经存在:

arm-linux-gnueabihf-g++   main.cpp.o   -Wl,-rpath,/opt/tkfs/:/opt/tkfs/usr/lib/arm-linux-gnueabihf /opt/tkfs/usr/local/lib/libopencv_core.so.2.4.10 -Wl,-rpath-link,/opt/tkfs/usr/local/lib

这是我的cmake文件:

cmake_minimum_required(VERSION 3.5)
project(testopencv)
set(CMAKE_EXPORT_COMPILE_COMMANDS "ON")
SET(CMAKE_SYSTEM_NAME Linux)
SET(ROOTFS_DIR          "/opt/tkfs/")
set(CMAKE_CXX_COMPILER  "arm-linux-gnueabihf-g++")
set(CMAKE_C_COMPILER    "arm-linux-gnueabihf-gcc")

set(CMAKE_SKIP_BUILD_RPATH              FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH      TRUE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH   TRUE)
set(CMAKE_FIND_ROOT_PATH  
    ${ROOTFS_DIR}
    ${ROOTFS_DIR}/usr/lib/
    ${ROOTFS_DIR}/usr/lib/arm-linux-gnueabihf
    )
set(CMAKE_INSTALL_RPATH ${ROOTFS_DIR};${ROOTFS_DIR}/usr/lib/arm-linux-gnueabihf;${ROOTFS_DIR}/opt/ros/indigo/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)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE   ONLY)
#set(CMAKE_SYSROOT "${ROOTFS_DIR}/")
find_package( OpenCV COMPONENTS core highgui)

add_executable( main src/main.cpp )

target_link_libraries(main ${OpenCV_LIBS})

ENV:

  • 所有ld_library_path都设置为空;
  • 3 gcc版本相同4.8.4(主机,交叉编译,arm开发板)
  • 这两台机器都是ubuntu 14.04。
  • 所有libs如libjpeg.so.8都在$ rootfs / usr / lib / arm-linux-gnueabihf

0 个答案:

没有答案
相关问题