2012-11-02 186 views
5

在過去的三天中,我一直試圖使用我的虛擬Ubuntu(12.04)爲TechNexion Blizzard開發板(運行未知版本的Angstrom)交叉編譯Mono 2.11.4 Win7 32位機器和CodeSourcery Sourcery G ++ ARM工具鏈,但幾乎沒有成功。 我已經按照網絡上的每個教程,但它不工作。不能交叉編譯Mono for ARM

CodeSourcery Sourcery G ++工具鏈和Scratchbox2(從最新的git源碼編譯)已安裝並正在運行。 Scratchbox2設置它使用

sb2-init armv7 /home/dev/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-gcc 

,而在正確的目錄(〜/ CodeSourcery的/ Sourcery_G ++ _精簡版/ ARM-NONE-Linux的gnueabi/libc中)。

我可以編譯一個簡單的'Hello world'(cpp),編譯並在板上運行它。在Ubuntu中:

file hello 
hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped 

我下載的源單聲道2.11.4跟着instructions之一。第一部分(在本機上)運行良好,沒有錯誤。然而,當我跑第二部分預期(一種編譯ARM)的./configure的作品,但隨後讓失敗「../lib/mini[some_file]是與ARM兼容輸出」。一個文件這些文件說,他們確實是英特爾公司的80386個可執行文件,但我不知道爲什麼。

所以下一步是運行一個make clean並重復這些步驟,但它仍然產生相同的結果。

我又試圖的./configure使整個事情裏面SB2,而不是它似乎在第一次工作。但隨後一些錯誤彈出構建打破:

./.libs/libmini.a(libmini_la-mini-arm.o): In function `mono_arch_init': 
/home/dev/source/host-mono/mono-2.11.4/mono/mini/mini-arm.c:689: undefined reference to `debugger_agent_single_step_from_context' 
/home/dev/source/host-mono/mono-2.11.4/mono/mini/mini-arm.c:689: undefined reference to `debugger_agent_breakpoint_from_context' 
/home/dev/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-ld: .libs/libmono-2.0.so.1.0.0: hidden symbol `debugger_agent_single_step_from_context' isn't defined 
/home/dev/CodeSourcery/Sourcery_G++_Lite/bin/arm-none-linux-gnueabi-ld: final link failed: Nonrepresentable section on output 

任何想法,我做錯了,或任何提示教程我可能錯過了?

//安德斯

+0

爲什麼單2.11.4和不是單聲道3.0嗎? 11是一個奇數,所以它意味着「不穩定」 – knocte

+0

當然,我可以嘗試使用2.10.9,但我認爲它不會編譯。但是我會努力的。 3.0仍處於測試階段,因此現在不是一種選擇。 – user1143242

+0

如果單聲道3.0編譯和舊版本不,而不是沒有,沒有? ;)順便說一句你在哪裏閱讀3.0被標記爲測試版? – knocte

回答

1

這是更好地使用ScratchBox中編譯本地代碼

[sbox-ARMEL: ~] > mkdir cross 
[sbox-ARMEL: ~] > cd cross 
[sbox-ARMEL: ~] > tar xzf ../mono-x.xx.tar.gz 

[sbox-ARMEL: ~] > cd arm-mono-x.xx 
[sbox-ARMEL: ~] > ./configure --disable-mcs-build 
[sbox-ARMEL: ~] > make 
[sbox-ARMEL: ~] > make install DESTDIR=`pwd`/tmptree 

另一邊打開新的終端,並建立託管代碼。

$ mkdir host-mono 
$ cd host-mono 
$ tar xzf ../mono-1.xx.tar.gz 

$ cd mono-1.xx 
$ ./configure 
$ make 
$ make install DESTDIR=`pwd`/tmptree 
+2

所以Scratchbox比Scratchbox2更好用嗎? 我有一種感覺,這是另一種方式(Sb2更好),當做一些嚴重的谷歌搜索。 – user1143242

0

你必須非常小心,你編譯時對交叉編譯其中頭文件和庫,或者你可以在運行時所造成的對庫的二進制不兼容性離奇和反直覺的崩潰發現自己。說到這一點,Linux ARM發行版在二進制兼容性方面扮演着非常安全的角色 - 通常會犧牲性能。

這很可能是你正在建立對你的開發主機頭文件和庫 - 因此架構不匹配。

你可能只是發現,預建opkg圖像只是工作。 Angstrom爲您提供pre-built packages。這可能是從埃包庫網絡的安裝一樣簡單。

如果你發現你需要從源代碼編譯,一個簡單的解決方案,您的問題將得到埃構建環境,並用它來構建單。最簡單的方法是從the Angtrom online image builder獲取預建的圖像(和開發圖像)。你的董事會有幸運的存在。

+0

不幸的是,董事會未列出水仙頁面上,但我將不得不向下挖掘更深,看看是否有任何「兼容機」。 – user1143242

+0

我在測試Beagleboard時多次使用過構建器,但在包含Mono時我從未設法完成構建。真的不知道爲什麼,它只是不工作... 我還以爲我在玩它的安全的什麼樣子內部編譯成爲一個工作Scratchbox2時。正如我所說:我可以編譯簡單的程序(甚至Sqlite3),但單聲道失敗。 – user1143242

+0

我已經在使用預置的Mono(使用** opkg **安裝),但不幸的是它是版本2.6.3。我需要2.10.x來運行我的.NET 4.0代碼。 2.10.8作爲預構建而存在,但僅用於Angstrom的新版本,因此我可能應該專注於升級Angstrom? – user1143242