相关疑难解决方法(0)

ARM编译错误,VFP注册由可执行文件使用,而不是目标文件

我最近几天一直遇到这个问题而且我无法理解这里真正发生的事情,或者问题是什么.

我有一个带有这些标志的makefile:

CC = arm-linux-gnueabihf-gcc-4.6
FLAGS = -O3 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -std=gnu99
Run Code Online (Sandbox Code Playgroud)

我在.a文件中有一个库,它有一些目标文件,我需要做的就是用可执行文件链接它们.我知道原型和所有这些,唯一抱怨的是以下内容:

/usr/bin/ld: error: *EXECUTABLE* uses VFP register arguments, *OBJECTFILE* does not
/usr/bin/ld: failed to merge target specific data of file *OBJECTFILE*
Run Code Online (Sandbox Code Playgroud)

当我不使用-mfloat-abi = softfp时,我得到另一个与浮点寄存器有关的错误.

有没有人知道造成这种情况的原因,以及我可以做些什么来解决这个问题,例如让我的可执行文件不使用虚拟浮点寄存器参数?

x@x:~/Desktop/perf_test$ make
arm-linux-gnueabihf-gcc-4.6 -c -O3 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -ftree-vectorize -std=gnu99 -mfloat-abi=softfp  perf_test.c ../baseline/util.c
arm-linux-gnueabihf-gcc-4.6 -o perf_test perf_test.o util.o  ../baseline/lib.a
/usr/bin/ld: error: perf_test uses VFP register arguments, perf_test.o does not
/usr/bin/ld: failed to merge target specific data of file perf_test.o
/usr/bin/ld: error: …
Run Code Online (Sandbox Code Playgroud)

gcc arm compilation

63
推荐指数
3
解决办法
10万
查看次数

ARM v7平台上的ARM v5共享库(ftd2xx) - 硬与软浮动问题

我需要在运行Ubuntu 12.04的BeagleBoard xM rev C上运行一个使用ftd2xx的程序.我正在尝试使用此处提供的ARM库libftd2xx.so .libFTDI不是一个选项.

我注意到的区别来自于运行readelf -hAlibftd2xx.so与BeagleBoard上的其他库有效.特定于arch的部分为ftd2xx提供操作系统名称为"ARM926EF-S",而为其他库提供操作系统名称为"7-A",为"v5TEJ"而不是"v7"提供CPU_arch.

我假设这意味着该库适用于ARM v5指令集,而BeagleBoard运行ARM v7.有没有办法让ftd2xx工作?

编辑:我被告知ARM7向后兼容ARM5,但这并不能解决我的问题.

另外需要注意的是,ldd libftd2xx.so在BeagleBoard上运行不会列出依赖项,而是打印出来not a dynamic executable,而它可以在其他库上运行.

编辑2:

这个问题似乎与软性和硬性ABI有关.我在BeagleBoard xM上有一张gnueabihf图像.当我尝试使用静态libftd2xx.a编译示例程序时,我得到了很多这样的:

/usr/bin/ld: error: static_link_uses VFP register arguments, libftd2xx.a(file.o) does not
/usr/bin/ld: failed to merge target specific data of file libftd2xx.a(file.o)

如果我尝试用mfloat-abi=soft或编译mfloatabi=softfp,我得到

In file included from /usr/include/stdio.h:28:0,
from main.c:12:
/usr/include/features.h:324:26 fatal error: bits/predef.h: No such file or directory
compilation terminated

我也试图用arm-linux-gnueabi而不是交叉编译arm-linux-gnueabihf,但生成的程序不能在BeagleBoard上执行.有什么我可以做或不可能吗?

---------解决方案----------------

经过一些麻烦后,FTDI为我提供了他们的库的硬浮版本.很多人单独要求后,我在这里提供:

https://s3.amazonaws.com/hayk-public/arm926-hf.zip

architecture arm backwards-compatibility beagleboard

6
推荐指数
1
解决办法
3242
查看次数