C++程序未能正确链接.so文件

3

我使用make install编译安装了GLEW库,并在编写一个小的测试程序(源代码可以在这里找到)时使用它。我运行了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' 显示什么? - John Hinrichsen
@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 - user4876829
2个回答

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

我尝试了一下,但程序仍未正确链接到libGLEW.so.2.0。我可能会在另一个系统上尝试以检查是否是我的计算机出了问题。 - user4876829
和之前一样,当我运行ldd main时,它没有正确链接到libGLEW.so.2.0。 - user4876829

-1

使用-Wl,-rpath=/usr/lib64进行编译


根据g++的说法,这些都不是有效的命令行选项。 - user4876829
那是一个单一的标志:https://dev59.com/Xmw15IYBdhLWcg3whME1 - JRG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接