2011-04-05 141 views
3

我是新的gcc编译器。文件格式无法识别;视为链接器脚本

我的朋友为我写了这个脚本(图形过滤器),但我不能使用它,因为我收到一些错误。

我有2个目录和C文件:

-dir- include --> basics.h common.h freeimage.h hqx.h imageIO.h pcxIO.h  
-dir- lib --> libfreeimage-3.13.1.so libfreeimage.a libfreeimage.so.3 libhqx.a libhqx.so libhqx.so.1 libhqx.so.1.0.0 
scaling.c 

我尝试使用下面的命令来编译:

gcc scaling.c -I./include -L./lib -lm -lfreeimage -lhqx -lstdc++ -o filter 

但我收到此错误:

/usr/lib/gcc/i486-slackware-linux/4.2.4/../../../../i486-slackware-linux/bin/ld:./lib/libhqx.so: file format not recognized; treating as linker script 
/usr/lib/gcc/i486-slackware-linux/4.2.4/../../../../i486-slackware-linux/bin/ld:./lib/libhqx.so:1: syntax error 
collect2: ld returned 1 exit status 

谢谢提前和抱歉我的英语。

回答

3

链接器会将任何看起来不像目标文件或库的文件作为包含命令的链接器脚本,以指定应如何完成链接。像加载地址,部分定义等

显然libhqx.so看起来不像你系统上的共享库。我认为它是建立在你的朋友的系统上的?

要了解文件的内容,请使用file命令。你应该得到这样的东西:

main% file /lib/libc-2.11.2.so 
/lib/libc-2.11.2.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped 

如果不是,你将不得不建立或找到一个与您的系统兼容的库。

+0

感谢您的回答理查德。 是的,Libhqx.so建立在我朋友的系统上。 我很新手,我遵循我的朋友的指示。 – MarcoD 2011-04-05 14:20:42

+0

可以使用以下命令来共享库: 'echo“/ dir/lib”>> /etc/ld.so.conf/sbin/ldconfig' – MarcoD 2011-04-05 14:34:51

+0

这会在.so文件运行时出错不能被动态链接器找到,但不会解决你的问题。在遇到运行时错误之前,您必须链接程序。 ;-) – 2011-04-05 14:47:56

2

昨天我有类似的问题,我认为你的libhqx.so是libhqx.so.1.0.0或libhqx.so.1在你的朋友的机器上的符号链接,当你复制这些文件时,这链接已经打破。 (至少这是我们系统中的情况,并且在我们删除.so文件并且创建正确的符号链接后问题得以解决)

相关问题