在过去的三天里,我一直试图在我的Win7 32位机器和CodeSourcery Sourcery上使用虚拟Ubuntu(12.04)交叉编译Mono 2.11.4 for TechNexion Blizzard板(运行未知版本的Angstrom) G ++ 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 ++ _ Lite / 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
我下载了Mono 2.11.4的源代码,然后关注了instructions之一。第一部分(在本机上)运行良好,没有错误。但是,当我运行第二部分(为ARM编译)时, ./ configure 按预期工作,但是然后make失败,“../ lib / mini [some_file]与arm输出不兼容” 即可。这些文件上的文件表示它们确实是Intel 80386可执行文件,但我不知道为什么。
所以下一步是运行 make clean 并重复这些步骤,但它仍会产生相同的结果。
然后我尝试 ./ configure 和 make 整个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 :(得分:0)
最好使用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
答案 1 :(得分:0)
在交叉编译时,您需要非常小心编译哪些头文件和库,或者在运行时由于二进制不兼容库而导致奇怪且反直觉的崩溃。在这样说时,Linux ARM发行版在二进制兼容性方面非常安全 - 通常以牺牲性能为代价。
您很可能正在构建开发主机标头和库 - 因此架构不匹配。
您可能会发现预先构建的opkg图像正常工作。 Angstrom为您提供pre-built packages。它可能与Angstrom软件包存储库中的网络安装一样简单。
如果您发现确实需要从源代码构建,那么解决问题的一个简单方法是获取Angstrom的构建环境并使用它来构建单声道。最简单的方法是从the Angtrom online image builder获取预先构建的图像(和开发图像)。运气好,你的董事会就有。