json-c的交叉编译

第一次学习交叉编译,从最简单的json-c的开源库开始,json-c开源库是一个用c实现的解析json字段的库,可以从github上获取,我另一篇博客专门对这个库有介绍,此篇主要记录对json-c进行交叉编译到arm开发板上。我下载的是Json-c的4.0版本。
1.cd到json-c的目录 里面有一个autogen.sh的脚本,首先要运行这个脚本来产生configure文件。运行完这个脚本后,我们就会发现在该目录下产生了configure文件。
2 ./configure --prefix=$PWD/tmp CC=/usr/local/linaro-armv7ahf-2016.08-gcc6.1/bin/arm-kinux-gnueabihf-gcc --enable-shared=yes --enable-static=no --host=arm-linux-gnueabihf --build=i686-pc-linux-gnu 首先,我们需要指定安装目录,利用--prefix选项,这里我们将安装路径指定为本目录下的tmp目录(默认一般为/lusr/local目录),当make install 的时候,编译好的库和include头文件就会被拷贝到这个目录下。其次,我们指定CC环境变量,编译的时候会利用CC所指定的编译器进行编译,这里我们指定CC为我们所需要使用的toolchain的gcc编译器(也可以直接用export设置CC的环境变量值,同样也可以设置CFLAGS等环境变量)。因为我们要编译为动态库,所以指定enable-shared,disable static,另外,需要指定host和build,解释如下
--build= 谁在这里编译? 意思说你目前的编译动作在哪里跑的 ? 我们的编译动作是在pc上进行的,所以 --build=x86-pc-linux-gnu
--host= 目前编译出来的程序在哪里跑 ? 所以json库编译好了以后是在arm上跑的,所以host设置为arm
--target=为谁编译程序,这在交叉编译的时候跟host一个意思,一般是guess的,而且configure 脚本会说是 target = host,所以这里我们没有指定,利用默认值。
关于configure的选项介绍,可以参考./configure --help来查看
3.make 调用make命令进行编译
4.make install 会根据指定的安装路径将Include文件夹头文件和lib拷贝到安装路径。我们这时就会发现在tmp目录下有include目录和lib目录。
5.我们将编译好的include头文件目录和lib目录拷贝到需要的地方,比如third-party下json-c目录,一个include目录为头文件,一个lib目录放.so库。有程序要调用该库时,需要包含include中的头文件,并在makefile中利用-I指定头文件所在的路径(比如third-party目录下的路径),-L指定库的路径,用-l指定所要链接的库。当需要在arm嵌入式设备上调用该库时,就把这个库拷贝到arm设备的/usr/lib目录下。
6.我们可以用该toolchain中的工具来查看编译好的程序的链接关系,比如利用objdump工具来查看NEEDED字段,如下 /usr/local/linaro-armv7ahf-2016.08-gcc6.1/bin/arm-linux-gnueabihf-objdump -p test_json_parser | grep NEEDED就可以看到这个test程序所需要的动态库,里面就包含libjson-c.so库。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值