json-c 交叉編譯(undefined reference to rpl_malloc )
(如果有幫助,請點個贊;如果有錯誤,請指出;如果轉載,請註明出處)
關鍵詞:
(1)json-c
(2)mips、openwrt
(3)Relocations in generic ELF
正文:
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
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 動態庫的時候顯示如下錯誤:
解決辦法:開啟config.h.in,刪掉下面兩行,重新編譯一次
#undef malloc
#undef realloc