我正在尝试交叉编译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: