【发布时间】:2016-01-06 21:48:37
【问题描述】:
我在 Ubuntu 14.04 上,默认安装了 glew 1.10。我想使用最新的 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 默认指定的路径。我该如何解决这个问题?
附带说明一下,具有完全相同 CMakeLists 的完全相同的代码在没有安装 libglew1.10 和 ubuntu-desktop 的服务器上编译不会出现问题。
【问题讨论】:
-
使用
find_library宏,您只能“找到”库。您不与此链接。您必须将 GLEW_LIBRARY 值添加到add_library。你检查过这个吗?您还可以查看:link_directories() 以确保您与 /usr/lib64 中的 glew 链接? -
@P.Brunet 我做了
target_link_libraries(myproject ${GLEW_LIBRARY})。不确定 link_directories 但即使是官方 CMake 文档也不鼓励使用它 -
@user3667089,安装更新版本的 ubuntu 可能是最简单的方法。可能不是你想听到的,但我想我会提到它..
标签: c++ ubuntu cmake shared-libraries dynamic-linking