我有兴趣编译sourceforge项目https://svn.code.sf.net/p/archopen/code/ArchOpen/trunk/,更具体地说是app AOnes,它是Archos Gmini 400的NES模拟器(非活动旧项目)
分析源代码,我看到Gmini400是arm7tdmi设备,没有MMU,用于编译的工具链是一个名为arm-linux-nofpu的buildroot。 我认为(根据buildroot-2009-02 menuconfig)no-fpu意味着软浮点,所以我试图建立这样一个工具链。
我使用buildroot-2013-02构建工具链(2009年和2010年都不适用于我),并提供以下选项:
我让其他选项保持原样并进行构建。
我检查了ArchOpen,启动配置脚本选择Gmini4XX作为目标(而不是Gmini 402 chich完全不同),选择defaut.rules并编辑生成的Makefile.conf以适应工具路径和名称(因为我生成的工具链名称不同)
第一个错误:
[thread.o]
{standard input}: Assembler messages:
{standard input}:1236: Error: Rn must not overlap other operand -- swpb r0,r3,[r0]
嗯,这段代码应该可以正常工作了,但是我打开了thread.h并修正了要通过的源代码(添加"&")
第二个错误:
undefined reference to __aeabi_idivmod and undefined reference to __aeabi_ldivmod
正如谷歌所说,这似乎是一个缺失的问题。
我编辑了wav文件夹makefile以添加-lgcc并指定-L/lib_folder_of_my_toolchain_containing_libgcc.a
第三个错误:
in gcc/config/arm/lib1funcs.asm : multiple definition of __divsi3
in gcc/config/arm/lib1funcs.asm : undefined reference to raise
in libgcc.a (some .o inside) : undefined reference to __aeabi_unwind_cpp_pr0
我不知道解决这个问题......
有没有人有想法?有没有人可以帮助我获得与此archopen代码兼容的工作arm7工具链?
谢谢!
答案 0 :(得分:0)
嗯,在这个特殊情况下,回到2005年是一个很好的解决方案......
使用ubuntu 5.04,buildroot使用defaut通用ARM(小端)配置构建,但以下选项除外:
编译完最后一个GCC阶段后,构建失败。此时,在PATH环境中添加buildroot / build_arm_nofpu / staging_dir / bin。变量,下载libfloat源码(libfloat-990616.orig.tar.bz2)tarball,编辑Makefile改变gcc,ld和arm-linux-uclibc-gcc,arm-linux-uclibc-ld和arm-linux- uclibc-as和build libfloat(make clean& make)。将libfloat.a复制到buildroot / build_arm_nofpu / staging_dir / lib并再次运行buildroot make(不清除)。构建应该成功结束。使用此工具链,mediOS将在没有任何警告的情况下进行编译。