我在电脑上新安装了Fedora 19 x86_64。我写了一个简单的OpenGL程序,但没能编译出来
gcc -o quad quad.c -lX11 -lGL -lGLU
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.8.1/../.. /../libGL.so when searching for -lGL
/usr/bin/ld: skipping incompatible /lib/libGL.so when searching for -lGL
/usr/bin/ld: skipping incompatible /usr/lib/libGL.so when searching for -lGL
/usr/bin/ld: cannot find -lGL
collect2: error: ld returned 1 exit status
我有MesaGL和其他库(即/usr/lib),那么怎么了?
对我来说,库符号链接有问题:
$ locate libGL.so | egrep ^/usr | xargs file
/usr/lib/libGL.so: symbolic link to `/usr/lib/libGL.so.1'
/usr/lib/libGL.so.1: symbolic link to `/usr/lib/libGL.so.1.2'
/usr/lib/libGL.so.1.2: symbolic link to `/usr/lib/fglrx/fglrx-libGL.so.1.2'
/usr/lib/fglrx/fglrx-libGL.so.1.2: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/FGL.renamed.libGL.so.1.2.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=46121ec8b16424a8b65a0cf11c3f9730ae0e49f5, stripped
/usr/lib64/libGL.so: broken symbolic link to `libGL.so.1.2.0'
/usr/lib64/libGL.so.1: symbolic link to `/usr/lib64/libGL.so.1.2'
/usr/lib64/libGL.so.1.2: symbolic link to `/usr/lib64/fglrx/fglrx-libGL.so.1.2'
/usr/lib64/fglrx/fglrx-libGL.so.1.2: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
因此/usr/lib/libGL.So指向一个32位的lib,/usr/lib/lipGL.So是一个断开的链接。我修复了/usr/lib64版本,使其正确指向libGL.so.1(以及/usr/lib版本,使之正确指向64位版本),这似乎让我的代码得以编译。
有关于libGL不兼容版本的警告,也有关于GCC库不兼容的警告。我认为您可能在64位操作系统上安装了32位版本的gcc。尝试
file -L `which gcc`
检查一下。
问题已解决。
我通过执行"aticonfig--uninstall"删除了ATI Catalyst Driver v13.6测试版重新启动用相同的命令编译程序,它成功了:)
现在我重新安装了ATI Catalyst Drivers v13.6测试版REBOOT并重新编译程序,它构建成功!!
不知道出了什么问题,但我现在有OpenGL在工作:)
安装freeglut-devel:#sudo yum-install-freeglut-devel