【发布时间】:2021-11-03 00:35:23
【问题描述】:
我正在尝试使用以下方法构建文件:
$ g++ tutorial.cpp -lGL -lGLEW -lglfw3 -lm -o tutorial
然后得到:
/usr/bin/ld: cannot find -lglfw3
collect2: error: ld returned 1 exit status
我检查了包,文件已经在那里了:
$ pacman -Ql glfw-x11
glfw-x11 /usr/
glfw-x11 /usr/include/
glfw-x11 /usr/include/GLFW/
glfw-x11 /usr/include/GLFW/glfw3.h
glfw-x11 /usr/include/GLFW/glfw3native.h
glfw-x11 /usr/lib/
glfw-x11 /usr/lib/cmake/
glfw-x11 /usr/lib/cmake/glfw3/
glfw-x11 /usr/lib/cmake/glfw3/glfw3Config.cmake
glfw-x11 /usr/lib/cmake/glfw3/glfw3ConfigVersion.cmake
glfw-x11 /usr/lib/cmake/glfw3/glfw3Targets-noconfig.cmake
glfw-x11 /usr/lib/cmake/glfw3/glfw3Targets.cmake
glfw-x11 /usr/lib/libglfw.so
glfw-x11 /usr/lib/libglfw.so.3
glfw-x11 /usr/lib/libglfw.so.3.3
glfw-x11 /usr/lib/pkgconfig/
glfw-x11 /usr/lib/pkgconfig/glfw3.pc
glfw-x11 /usr/share/
glfw-x11 /usr/share/licenses/
glfw-x11 /usr/share/licenses/glfw-x11/
glfw-x11 /usr/share/licenses/glfw-x11/LICENSE.md
我在this question(关于其他库)上看到了创建文件链接的说明:
问题是链接器正在寻找
libmagic.so但你只 有libmagic.so.1快速破解是将
libmagic.so.1符号链接到libmagic.so
我查了一下,我的系统确实有它:
$ ls -l /usr/lib/libglfw*
lrwxrwxrwx 1 root root 12 abr 13 12:04 /usr/lib/libglfw.so -> libglfw.so.3
lrwxrwxrwx 1 root root 14 abr 13 12:04 /usr/lib/libglfw.so.3 -> libglfw.so.3.3
-rwxr-xr-x 1 root root 285504 abr 13 12:04 /usr/lib/libglfw.so.3.3
看到另一个答案:
正如 grepsedawk 刚刚制定的,答案在于
g++的-l选项,调用ld。如果你 查看此命令的手册页,您可以这样做:
g++ -l:libmagic.so.1 [...]
我试过了,这确实有效:
$ g++ tutorial.cpp -lGL -lGLEW -l:libglfw.so.3 -lm -o tutorial
后来,我看到这也有效:
$ g++ tutorial.cpp -lGL -lGLEW -lglfw -lm -o tutorial
为什么会这样?
【问题讨论】:
-
一些
64 bit系统有/use/lib和/usr/lib64,你可能需要安装64 bit版本的库。 -
"该文件已经存在" -- 抱歉,我看不到该列表中名为
libglfw3.so或libglfw3.a的文件在哪里。你在哪里看到的?