我在Ubuntu 14.04上默认安装了glew 1.10。我想使用最新的glew 1.13,但sudo apt-get remove libglew1.10不是一个选项,因为ubuntu-desktop依赖于它,我不小心做了一次而且我不得不进入恢复模式重新安装所有东西。 / p>
我下载了最新的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. ..
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指定的路径。我该如何解决这个问题?
作为旁注,完全相同的代码与完全相同的CMakeLists在没有安装libglew1.10和ubuntu-desktop的服务器上编译时没有问题。
答案 0 :(得分:0)
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
答案 1 :(得分:0)
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)