我在默认情况下安装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

关于c++ - 如何使CMake实际上与使用find_library找到的库链接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34643467/

10-11 00:00