linux libcurl.a编译,交叉编译总结 libosscore.a libcurl.a libmysqlclient.a

把工程文件交叉编译到arm上运行,着实花费了一番功夫。首先遇到的错误是 X uses VFP register arguments, B does not

百度了一下,发现是硬浮点和软浮点的问题,原先是思路是改变X的编码方式,迁就于Y,后来怎么弄都不行,改变思路,用armv7-linux的编译器重新编几个库。

1.libosscore.a

下载OSS-master.zip

这个库是用cmake编译的,

mkdir build  保证cmake出来的文件和原来的文件区分开

cd build

export PATH=/home/slk/STM/STLinux-2.4/devkit/armv7/arm-cortex-linux-gnueabi/bin:$PATH  使得cmake文件寻找gcc的时候,找到armv7里的gcc

cmake ..

make

编译完成,把libosscore.a拷到工程中,编译,出现relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC错误,是在生成libosscore.a的时候,没有使用-fPIC参数的缘故,于是,修改OSSC-master根目录下的CMakeLists.txt文件

SET(CMAKE_C_FLAGS "-std=c99 -Wall "

CACHE

STRING "Flags used by the compiler during all build types." FORCE)

改为

SET(CMAKE_C_FLAGS "-std=c99 -Wall -fPIC"

CACHE

STRING "Flags used by the compiler during all build types." FORCE)

删掉build中的CMakeCache.txt后重新cmake 和make 。

搞定

2.libcurl.a

下载curl-7.42.1.tar.gz

这个库是用configure编译的

同样export PATH=/home/slk/STM/STLinux-2.4/devkit/armv7/arm-cortex-linux-gnueabi/bin:$PATH,这样也不用给configure传参来设定CC。

生成后同样有因为没加-fPIC导致的问题,所以修改所有Makefile文件,在CFALGS后面补上-fPIC

搞定

3.libMySQLclient.a

下载mysql-connector-c-6.1.6-src.tar.gz

这个库是用cmake编译的,所以一切步骤同编译libosscore.a,不过可以省去修改CMakeLists.txt一步。

在make到88%的时候,发生 /bin/sh: ./comp_err,无法执行的二进制文件  错误

于是,再解压一份mysql-connector-c-6.1.6-src,用linux下的gcc进行编译,编译成功后,将comp_err拷到交叉编译那边的相应文件夹中,继续make,成功。

搞定。

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android libcurl.a是一个静态库,它是用C语言编写的libcurl网络传输库的编译结果。静态库是一种在编译时被链接到应用程序中的库,通过将库的对象代码直接嵌入到应用程序中,从而使应用程序可以在没有其他外部依赖项的情况下独立运行。 静态库的使用方式是将其与应用程序进行链接,这样应用程序就可以使用静态库中定义的函数和变量。在Android开发中,可以使用Android Studio等工具将libcurl.a添加到项目中,并在项目配置中进行链接设置。 使用Android libcurl.a静态库可以为Android应用程序提供强大而灵活的网络传输功能。libcurl库支持多种协议,包括HTTP、HTTPS、FTP等,并提供了一系列功能来方便地进行网络通信,例如数据传输、下载、上传等。通过使用libcurl库,Android应用程序可以方便地与网络资源进行交互,并实现各种功能,如下载文件、上传数据等。 静态库的一个优点是在编译时能够减少应用程序的体积,因为库的代码嵌入到应用程序中,不需要在运行时再次加载。同时,静态库的使用也可以提高应用程序的性能,因为库的代码可以被编译器优化,以达到更好的执行效率。 总之,Android libcurl.a静态库是一个有用的工具,可以为开发Android应用程序提供强大的网络传输功能,通过与应用程序进行链接,实现各种网络通信需求,同时也能减少应用程序的体积和提升性能。 ### 回答2: Android libcurl.a是一个静态库,它是Curl库在Android平台上的编译结果。Curl库是一个开源的网络传输工具,支持多种协议(包括HTTP、FTP、Telnet等)和一些常见的功能(如文件上传、下载等)。 libcurl.a的静态库形式可以将Curl库的功能和代码整合到一个独立的二进制文件中,这意味着在编译时会将Curl库中的函数和依赖项静态链接到应用程序中。 使用libcurl.a的静态库可以使开发者在编译阶段直接将Curl库的功能包含到应用程序中,不再需要运行时加载动态库文件。这样可以减少应用程序的体积并提升性能,但也意味着更新Curl库需要重新编译应用程序。 要在Android项目中使用libcurl.a,可以将静态库文件复制到项目的jni目录下,然后在JNI层的C/C++代码中引用该库。具体步骤包括在Android.mk中添加libcurl.a的编译指令,并在代码中使用#include导入相关的Curl库头文件。然后可以在应用程序中使用Curl库提供的功能,如发送HTTP请求等。 总之,Android libcurl.a是一个静态库,可以将Curl库的功能整合到Android应用程序中,帮助开发者在应用层面进行网络传输和其他网络相关操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值