使用命令g++ -o test -L . -l pq
libpq.so: file not recognized: File format not recognized
#file libpq.so
libpq.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), not stripped
gcc版本4.1.2 20070115(SUSE Linux)
如果我尝试使用-l dbodbc
代替-l pq
,我会收到同样的错误。
请注意test.c
是一个简单的hello world程序。
先谢谢。
答案 0 :(得分:6)
file /usr/bin/g++
告诉您g++
本身是64位可执行文件,即它在64位计算机上运行,它不会告诉您g ++可以编译 64位代码(它非常不可能,但可能是一个完全不同的处理器的交叉编译器!)使用g++ -v
或g++ -dumpmachine
找出它为其生成可执行文件的目标。
G ++实际上并没有使用该库,它只是将-l
选项传递给链接器,因此错误来自链接器ld
如果ld
和objdump
都说他们无法识别该库,但同一个文件在另一台计算机上运行正常,我会尝试更新或重新安装binutils
包,提供ld
和objdump
。
您可能安装了32位binutils
,因此ld
和objdump
无法理解x86_64库。确保安装了64位(即x86_64)binutils RPM。