4,269
社区成员




我使用cmake生成一个a.so,a.so依赖opencv的4.8版本的部分so。我把这些so放在a.so的同级目录lib文件夹里。cmake构建的时候没有报错。但是在调用a.so的时候,加载动态库失败。使用ldd -r 发现a.so链接的是opencv3.2版本的so。检查后发现,在系统目录下还有3.2版本的opencv。
编译的时候链接的是lib目录下的cv4.8版本。
使用的时候链接的是系统目录下的cv3.2版本。
尝试的解决方案:
1、在cmakelist中设置a.so安装路径(无效,仍然链接cv3.2)
#SET(CMAKE_SKIP_BUILD_RPATH FALSE)
#SET(CMAKE_INSTALL_RPATH "\${ORIGIN}/lib/")
#SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
#SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
2、在cmakelist中通过find_package(OpenCV 4 REQUIRED ) (查找cv4版本失败)
3、# 设置运行时依赖目录 (失败,仍然链接cv3.2)
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-Wl,-rpath,${ORIGIN}/lib")
请各位大佬给点意见。。。
find_library(OpenCV_LIBRARIES NAMES opencv_core opencv_highgui HINTS /path/to/opencv/lib)
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})
查找库可以指定路径 不然的话搜索顺序和系统配置有关 不一定是你需要的版本