繁体   English   中英

如何使CMake实际上与它通过find_library找到的库链接

[英]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,查找库文件的确切路径( sodll,取决于平台)。 之后,您仍然需要执行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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM