这个算是一个经常遇到的问题了,在编辑一些cmake的库的时候,
在代码编译的时候是正常的,但是在使用的时候却会报如下的问题:
error while loading shared libraries: xxx.so: cannot open shared object file: No such file or directory
项目中各个模块输出的 so 文件都是在各个模块的文件夹下,不是在同一个地方,用 LD_LIBRARY_PATH 去把所有的模块输出文件路径加进来不现实。
一个解决方法:
find_package(XXX)
通过 find_package(XXX) 来找,前提是 CMake 官方提供有 FindXXX 模块(
find_library默认不搜索LD_LIBRARY_PATH, 并且网上也找不到让cmake搜索LD_LIBRARY_PATH的文章。)
find_package(JNI)
get_filename_component(JVM_LIB_PATH ${JAVA_JVM_LIBRARY} DIRECTORY)
get_filename_component(JAVA_LIB_PATH ${JVM_LIB_PATH} DIRECTORY)
link_directories(${JVM_LIB_PATH} ${JAVA_LIB_PATH})
set_target_properties(${NAME} PROPERTIES LINK_FLAGS "-ljvm")
否则要用到下面的方法
参考资料:
How can LD_LIBRARY_PATH be changed within CMake
Does CMake’s find_library search LD_LIBRARY_PATH
用 CMake 的一点经验
CMake库搜索函数居然不搜索LD_LIBRARY_PATH? 由编译工具使用体验而引发的思考