linux交叉编译的库在链接时提示:xxx uses VFP register arguments xxx does not

很多时候我们要处理的数据,不仅仅是整数和字符串,还有浮点数即小数。在多媒体数据处理方面表现的更多。是不是所有的CPU都支持,浮点运算呢?答案:不是。

1、问题描述

2、原因

该错误表明使用了不正确或不支持的VFP(virtual float point)浮点运算方式。

  1. 不支持的VFP编译:MCU不支持VFP(hard)计算;
  2. 不一致的VFP编译:链接的Lib中VFP计算和App中编译VFP计算选项不一致;

3、解决方案

方案1

检查APP的编译选项 CFLAGS 的VFP的计算类型:

FABI := hard //这里把hard改为softfp
CFLAGS += -mfloat-abi=$(FABI)

方案2

更换编译器版本。

方案3

重编译Lib库,CFLAGS中添加或修改-mfloat-abi=hard(须和APP中编译选项一致),一般库是默认软浮点

最简步骤

1、下载并解压libcurl源码。

2、运行configure,产生Makefile文件,--frefix表示安装目录。

    ./configure --prefix=/home/zhong/curl --disable-shared --enable-static --without-libidn --without-ssl --without-librtmp --without-gnutls --without-nss --without-libssh2 --without-zlib --without-winidn --disable-rtsp --disable-ldap --disable-ldaps --disable-ipv6

3、gcc  -o simple simple.c  -L../lib -lcurl -pthread

4、编译成功。

4、实例

环境:
工具链:arm-melis-eabi-
MCU: Cortex-A7-SMP

libmediainfo.a编译中未指明VFP运算方式,默认使用了-mfloat-abi=softfp
APP指明-mfloat-abi=hard,链接时报错“xxx uses VFP register arguments xxx does not …”
重编译libmediainfo.a库,并在CFLAGS中指定-mfloat-abi=hard即可。

libcurl(http和https)

ZT

CURLSSL_DIR = $(ROOTDIR)/ota/ua/libs
CURLSSL_LIB = $(CURLSSL_DIR) -lcurl -lssl -lcrypto

git       HTTP>[curl_init:4846][2020-12-14 18:27:09][info]curl_version:libcurl/7.63.0!
7.63.0 HTTP>[curl_init:4846][2020-12-14 18:42:42][info]curl_version:libcurl/7.63.0 zlib/1.2.8! 
7.65.0 HTTP>[curl_init:4846][2020-12-14 18:46:51][info]curl_version:libcurl/7.65.0!
./configure --host=arm-oe-linux-gnueabi --without-ssl --enable-static
./configure --host=arm-oe-linux-gnueabi --without-ssl --without-zlib --enable-static

HW

export PATH=$PATH:/opt/MH5000/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin
export CFLAGS="-mfloat-abi=hard"
./configure --host=arm-linux-gnueabihf --without-ssl --enable-static
make
make install
HTTP>[curl_init:4188][1970-01-01 01:43:55][info]curl_version:libcurl/7.63.0!
HTTP>[curl_init:4188][1970-01-01 00:08:53][info]curl_version:libcurl/7.65.0!

me

./configure --host=arm-oe-linux-gnueabi --with-ssl --enable-static
make
make install
cp /usr/local/lib/libcurl.a ./
CURLSSL_DIR = $(ROOTDIR)/ota/ua/libs
CURLSSL_LIB = $(CURLSSL_DIR) -lcurl -lssl -lcrypto

git上    HTTP>[curl_init:4315][2020-12-14 15:06:38][info]curl_version:libcurl/7.65.0 OpenSSL/1.0.2h zlib/1.2.8!
7.63.0   HTTP>[curl_init:4315][2020-12-14 15:45:41][info]curl_version:libcurl/7.63.0 OpenSSL/1.0.2h zlib/1.2.8!
7.65.0   HTTP>[curl_init:4315][2020-12-14 15:55:01][info]curl_version:libcurl/7.65.0 OpenSSL/1.0.2h zlib/1.2.8!

qiao

./configure --with-ssl=/usr/local/ssl –-disable-ldap –-disable-ldaps --enable-static

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误"uses VFP register arguments, output does not collect2: error: ld returned 1 exit status"表明在编译过程中使用了不正确或不支持的VFP(virtual float point)浮点运算方式。这个错误有几个可能的原因和解决方案: 1. 不支持的VFP编译:MCU不支持VFP(hard)计算。解决方案是检查MCU的技术规格,确认是否支持VFP(hard)计算。如果不支持,可以尝试使用VFP(softfp)计算方式。 2. 不一致的VFP编译:链接中的VFP计算方式和应用程序中编译的VFP计算选项不一致。解决方案是重新编译CMSIS,并在编译选项中指定正确的VFP计算方式,例如通过指定-mfloat-abi=hard来使用VFP(hard)计算方式。 3. 检查应用程序的编译选项CFLAGS的VFP计算类型:FABI := hard。如果需要使用VFP(hard)计算方式,确认CFLAGS中的VFP计算类型是否正确设置为hard。如果需要使用VFP(softfp)计算方式,将FABI的值改为softfp。 根据具体情况选择合适的解决方案来解决这个错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [xxx uses VFP register arguments xxx does not](https://blog.csdn.net/jimaofu0494/article/details/102496715)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值