[英]How to make CMake actually link with the library it finds with find_library
我在默认情况下安装glew 1.10的Ubuntu 14.04上。 我想使用最新的glew 1.13,但不选择sudo apt-get remove libglew1.10,因为ubuntu-desktop依赖于它,所以我不小心这样做了一次,我不得不进入恢复模式以重新安装所有内容。
我下载了最新的glew 1.13和sudo make install。 glew 1.13库已安装在/usr/lib64/libGLEW.so下。 旧的1.10版本仍在/usr/lib/x86_64-linux-gnu/libGLEW.so中。 /usr/include/GL/glew.h和/usr/include/GL/wglew.h中的头文件确实已替换为1.13中的文件。
在我的FindGLEW.cmake中,运行cmake后,它确实成功找到了正确的libGLEW.so。
find_library(GLEW_LIBRARY NO_DEFAULT_PATH
NAMES
GLEW glew
PATHS
/usr/lib64
DOC "The GLEW library"
)
可以通过ccmake ..进行验证,GLEW_LIBRARY部分的确显示/usr/lib64/libGLEW.so。
但是,当我编译代码时,我仍然从仅glew 1.13可用的方法中得到未定义的引用错误,进一步使用ldd mylib.so检查,它显示
libGLEW.so.1.10 => /usr/lib/x86_64-linux-gnu/libGLEW.so.1.10 (0x00007f10d130b000)
这意味着它仍旧从1.10开始与旧的共享库链接,并将目录搜索优先级设置为etc / ld.so.conf.d / *高于find_library默认指定的路径。 我该如何解决?
附带说明一下,在没有安装libglew1.10和ubuntu-desktop的服务器上,具有完全相同的CMakeLists的完全相同的代码可以毫无问题地进行编译。
ldd和ld都考虑了运行时共享库加载器信息(通过LD_LIBRARY_PATH
env var)。
因此,在链接程序之前,请确保执行以下操作:
export LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH
详细信息: http : //tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
find_library,查找库文件的确切路径( so或dll,取决于平台)。 之后,您仍然需要执行add_library链接到它。 当我在另一个库中遇到此问题时,以下内容对我有用:
find_library(GLEW_LIBRARY NO_DEFAULT_PATH
NAMES GLEW glew
PATHS /usr/lib64
DOC "The GLEW library")
add_library(glew SHARED IMPORTED)
set_target_properties(glew
PROPERTIES IMPORTED_LOCATION ${GLEW_LIBRARY})
target_link_libraries(myproject glew)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.