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

猜你喜欢

转载自blog.csdn.net/wteruiycbqqvwt/article/details/110089862