2011-04-05 162 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文件並且創建正確的符號鏈接後問題得以解決)

相關問題