【问题标题】:C++ program not linking to .so file properlyC++ 程序未正确链接到 .so 文件
【发布时间】:2017-12-20 15:32:26
【问题描述】:

我构建了 GLEW(使用 make install)用于我正在编写的一个小型测试程序(如果需要,可以找到源代码 here)。我运行 locate libGLEW.so 只是为了检查 GLEW 库是否已正确安装,并得到以下输出:

/usr/lib64/libGLEW.so
/usr/lib64/libGLEW.so.2.0
/usr/lib64/libGLEW.so.2.0.0

这是完全正常的。然后我使用命令编译它:

g++ main.cpp -o main -lglfw -lGLEW -lGL -lX11 -lpthread -lXi -g

这也没有引发任何错误。但是,当我尝试执行程序时:

./main: error while loading shared libraries: libGLEW.so.2.0: cannot open shared object file: No such file or directory

只是为了进行完整性检查,我运行了ldd main | grep "GLEW",果然:

libGLEW.so.2.0 => not found

我最初认为这可能是链接器没有搜索包含库的目录的问题。所以我运行了命令ld --verbose | grep "/usr/lib64"一个包含所需目录的 SEARCH_DIR:

...  SEARCH_DIR("=/usr/lib64"); ...

这尤其令人困惑。我尝试使用-L/usr/lib64 选项进行编译,但同样的错误消息仍然存在。我检查了该库的符号链接是否正确,它们是:

lrwxrwxrwx  1 root root   16 Jul 15 10:22 libGLEW.so -> libGLEW.so.2.0.0
lrwxrwxrwx  1 root root   16 Jul 15 10:38 libGLEW.so.2.0 -> libGLEW.so.2.0.0
-rw-r--r--  1 root root 707K Jul 15 10:22 libGLEW.so.2.0.0

我不确定究竟是什么导致了这个问题,但我开始相信我没有正确安装这些库。我觉得答案就在眼前,但我找不到。

提前感谢您的帮助。

【问题讨论】:

  • 'uname -a' 显示什么?
  • @JohnHinrichsen Linux TRASHTOPB 4.8.0-58-generic #63~16.04.1-Ubuntu SMP Mon Jun 26 18:08:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

标签: c++ g++ shared-libraries glew


【解决方案1】:

-Wl,-rpath=/usr/lib64编译

【讨论】:

【解决方案2】:

Debian 和 Ubuntu 不会将系统库安装到 /usr/lib64,并且您使用的安装说明对于这些系统是错误的。 (无论如何,绕过打包系统将库安装到/usr 中并不是一个好主意。)默认情况下会搜索/usr/local/lib(与其他系统不同),因此您可以将库移动到该目录。

【讨论】:

  • 我试了一下,但该程序仍未正确链接到 libGLEW.so.2.0。我可能会在不同的系统上尝试此操作,以检查是否是我的计算机有问题。
  • 和以前一样,当我运行ldd main 时,它没有正确链接到 libGLEW.so.2.0
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2020-02-26
  • 1970-01-01
相关资源
最近更新 更多