天天看点

json-c 交叉编译(undefined reference to rpl_malloc )

(如果有帮助,请点个赞;如果有错误,请指出;如果转载,请注明出处)

关键词:

(1)json-c

(2)mips、openwrt

(3)Relocations in generic ELF

(4)undefined reference to rpl_malloc

正文:

1、设置环境变量

(1)STAGING_DIR=/home/ubuntu/workplace/sdk/toolchain/bin:$STAGING_DIR

     export STAGING_DIR;

(2)export PATH=$PATH:/home/ubuntu/workplace/sdk/toolchain/bin

2、运行./autogen.sh

3、运行config.guess,获取--build=option,我的系统是i686-pc-linux-gnu

4、运行configure,

./configure --build=i686-pc-linux-gnu --host=mips-openwrt-linux-uclibc --prefix=$PWD/install

5、运行

 makeCC=/home/ubuntu/workplace/sdk/toolchain/bin/mips-openwrt-linux-uclibc-gcc  LD=/home/ubuntu/workplace/sdk/toolchain/bin/mips-openwrt-linux-uclibc-ld 

6、make install

7、遇到的问题:

/usr/bin/ld: .libs/arraylist.o:  Relocations in generic ELF (EM: 8) 

原因:由于搜索路径里面不包含交叉编译器的路径,所以configure没有找到交叉编译器。

也就是说,configure里面的--host=mips-openwrt-linux根本没有生效。

解决办法:

(1)设置搜索路径:

export PATH=$PATH:/home/ubuntu/workplace/sdk/toolchain/bin (请根据实际情况设置)

(2)make的时候指定CC和LD 

8.遇到的问题

编译的时候正常,但是在链接json-c 动态库的时候显示如下错误:

undefined reference to rpl_malloc

解决办法:打开config.h.in,删掉下面两行,重新编译一次    

#undef malloc

#undef realloc

  • IT从业人员需要及时关注技术动态,但是互联网的内容却过于离散,好东西往往隐藏得很深。 现在可以在微信公众号里面 搜索关注 “小鱼儿的IT技术分享” ,订阅我为大家每天汇总的IT技术信息。欢迎大家关注!
    • 有兴趣的请点击《与IT技术相关的微信公众号》

继续阅读