【发布时间】:2014-07-08 20:56:39
【问题描述】:
在过去的三天里,我一直在尝试在我的 Win7 32 位机器和 CodeSourcery Sourcery 上使用虚拟 Ubuntu (12.04) 为 TechNexion Blizzard 板(运行未知版本的 Angstrom)交叉编译 Mono 2.11.4 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] is incompatible with arm output" 。这些文件的文件表明它们确实是 Intel 80386 可执行文件,但我不知道为什么。
所以下一步是运行 make clean 并重复这些步骤,但仍然产生相同的结果。
然后我尝试在 sb2 中 ./configure 和 make 整个东西,起初它似乎工作。但是随后出现了一些错误,构建失败了:
./.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
关于我做错了什么的任何想法,或者关于我可能错过的教程的任何提示?
//安德斯
【问题讨论】:
-
为什么是单声道 2.11.4 而不是单声道 3.0? 11 是一个奇数,所以它意味着“不稳定”
-
当然,我可以尝试使用 2.10.9,但我认为它也不会编译。但是我会尝试。 3.0 仍处于测试阶段,所以现在不能选择。
-
如果单声道 3.0 编译而旧版本没有编译,宁愿拥有它而不是什么都没有,不是吗? ;) 顺便说一句,您在哪里读到 3.0 被标记为测试版?
-
在 Mono download page 上显示 Beta 版本:3.0,但也许它们仅表示预构建的 OSX 二进制文件。我会检查源代码。
标签: mono arm cross-compiling embedded-linux