C ++程序没有正确链接到.so文件

时间:2017-07-15 18:30:12

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

我构建了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

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

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

使用-Wl,-rpath=/usr/lib64

进行编译