2012-11-08 59 views
1

我安裝了新版本的Ubuntu(12.10,從12.04升級),現在我無法鏈接。即使對於一個簡單的「Hello_World.adb」計劃是正確的:在新的Ubuntu版本下gnatlink失敗

gnatlink hello_world 
/usr/gnat/libexec/gcc/i686-pc-linux-gnu/4.5.4/ld: crt1.o: No such file: No such file or directory 
collect2: ld returned 1 exit status 
gnatlink: error when calling /usr/gnat/bin/gcc 

我已經看到了一些在各種論壇「修復」的,但他們似乎不蚊蚋的工作:我想這有用gnat自己的命令行構建。我嘗試過各種構造,但無濟於事。

有誰知道如何解決這個問題?


最新資訊:我創建了一個甲骨文「虛框」運行Ubuntu 12.04,安裝了最新的「自由報」 GNAT GPL,它似乎工作得很好。顯然,這個問題與Ubuntu 12.10版本有關。我在物理機器和虛擬機上都運行12.10:兩者都導致GNAT GPL失敗。 fwiw

我會認爲這個問題關閉。感謝大家的意見和建議!

新增新信息:我忽略了設置PATH變量,因此GNAT二進制文件的路徑位於字符串的末尾。顯然,這是我允許鏈接的。當我將GNAT GPL的建議放在字符串開頭的二進制路徑時,鏈接停止工作!瘋了!任何想法,任何人?

+0

我使用的x86 Linux的最新自由報gnatgpl。 32位。 –

+0

'gnatmake'作品;我不知道這是否能解決您的問題。 –

+0

謝謝,基思,但gnatmake失敗,同樣的錯誤消息+額外的消息'gnatmake:***鏈接失敗。' –

回答

1

檢查文件權限&文件路徑。 * nix有一個非常脆弱的權限系統,有時它的工作依賴於實際的目錄和符號鏈接的目錄。

或者只是遷移到Windows,我總共有一個文件權限問題......並且它在* nix子系統(cygwin,IIRC)上。

+0

感謝您的建議Shark8。如果出現權限問題,我將自己設置爲超級用戶,但問題仍然存在。我寧願在Windows上,但我需要使用Posix,而Windows上的Florist非常不完整,上次我查了一下。我會嘗試在Windows上的虛擬機中安裝早期版本。 –

1

我運行Debian用,現在看來,64位GNAT GPL 2012年我能得到gnatmake告訴我什麼命令行使用-largs -Wl,-v標誌發送到系統鏈接:

$ gnatmake -f hello.adb -largs -Wl,-v 
gcc -c hello.adb 
gnatbind -x hello.ali 
gnatlink hello.ali -Wl,-v 
collect2 version 4.5.4 20120510 for GNAT GPL 2012 (20120509) (x86-64 Linux/ELF) 
/opt/gnat-gpl-2012/bin/../libexec/gcc/x86_64-pc-linux-gnu/4.5.4/ld --eh-frame-hdr -m 
elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello 
/usr/lib/../lib64/crt1.o /usr/lib/../lib64/crti.o 
/opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4/crtbegin.o 
-L./ -L/opt/gnat-gpl-2012/lib/gcc/x86_64-pc-linux-gnu/4.5.4/adalib/ 
-L/opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4 
-L/opt/gnat-gpl-2012/bin/../lib/gcc 
-L/opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4/../../../../lib64 
-L/lib/../lib64 -L/usr/lib/../lib64 
-L/opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4/../../.. 
b~hello.o ./hello.o -v /opt/gnat-gpl-2012/lib/gcc/x86_64-pc-linux-gnu/4.5.4/adalib/libgnat.a 
-lgcc -lgcc_eh -lc -lgcc -lgcc_eh /opt/gnat-gpl-2012/bin/../lib/gcc/x86_64-pc-linux-gnu/4.5.4/crtend.o 
/usr/lib/../lib64/crtn.o 
GNU ld (GNU Binutils) 2.20 

它顯示它正在從/ usr/lib64(YMMV)獲取crt1.o(和其他)。

我想知道您是否需要(重新)安裝Ubuntu C編譯器? (我認爲這是sudo apt-get build-essentials)。

另一方面,使用dpkg --search(查找哪個安裝的軟件包安裝了特定文件)表明,您可能只需要打包libc或者libc-dev

1

每當我遇到這個問題時,它通常都是Debian新版本的「多lib問題」的表現,現在Ubuntu正在移動他們的庫,以便您可以構建32位和64位可執行文件(或跨爲Windows編譯或Arduino的!)在同一臺機器上...

所以我的機器上,我可以在

/usr/lib/x86_64-linux-gnu/crt1.o 

找到crt1.o和如果我發出命令行

export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu 

在運行Gnatmake之前,它解決了這個問題。 因爲它是連接器(LD)失敗了,你可能會想嘗試

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu 

如果LIBRARY_PATH不起作用

如果是這樣的話,還有其他的方法來解決問題, 喜歡的方式在你的.bashrc腳本中找出庫路徑...

+0

應該提到,如果你在32位機器上,你的LIBRARY_PATH設置將會不同。你需要找到crt1.0在你的Ubuntu 12.10安裝中的位置 –

0

謝謝大家。我已經嘗試了所有上述建議,並嘗試過每種GPS的組合,以前的Ubuntu版本,以及硬盤和虛擬機都沒有成功。

我現在正在使用管道成功地追求一個(非常)有限的Windows Posix(wposix)版本,因爲這是wposix產品中實現的一切。我想使用共享內存和消息。

0

我遇到了同樣的問題,我能找到的唯一解決辦法是超級用戶身份運行以下命令:

ln -s /usr/lib/x86_64-linux-gnu /usr/lib64