交叉編譯時候如何設定連線庫的搜尋路徑
交叉編譯的時候不能使用本地(i686機器,即PC機器,開發機器)機器上的庫,但是在做編譯連結的時候預設的是使用本地庫,即/usr/lib,/lib兩個目錄。因此,在交叉編譯的時候,要採取一些方法使得在編譯連結的時候找到需要的庫。
首先,要知道:編譯的時候只需要標頭檔案,真正實際的庫檔案在連結的時候用到。(這是我的理解,如果有不對的地方,敬請網上各位大俠指教) 然後,講講如何在交叉編譯連結的時候找到需要的庫。
(1)、交叉編譯時候直接使用-L和-I引數指定搜尋非標準的庫檔案和標頭檔案的路徑。例如:
arm-linux-gcc test.c -L/usr/local/arm/2.95.3/arm-linux/lib -I/usr/local/arm/2.95.3/arm-linux/include
(2)、使用ld.so.conf檔案,將用到的庫所在檔案目錄新增到此檔案中,然後使用ldconfig命令重新整理快取。
(3)、使用如下命令:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/arm/2.95.3/arm-linux-lib
參見《ld.so.conf 檔案與PKG_CONFIG_PATH變數》這篇文章。
(4)、交叉編譯時使用軟體的configure引數。例如我編譯minigui-1.3.3,使用如下配置:
#!/bin/bash
rm -f config.cache config.status
./configure --build=i686-linux --host=arm-linux --target=arm-linux \
CFLAGS=-I/usr/local/arm/2.95.3/arm-linux/include \
LDFLAGS=-L/usr/local/arm/2.95.3/arm-linux/lib \
--prefix=/usr/local/arm/2.95.3/arm-linux \
--enable-lite \
--disable-galqvfb \
--disable-qvfbial \
--disable-vbfsupport \
--disable-ttfsupport \
--disable-type1support \
--disable-imegb2312py \
--enable-extfullgif \
--enable-extskin \
--disable-videoqvfb \
--disable-videoecoslcd
這裡我配置了CFLAGS和LDFLAGS引數,這樣一來,我就不用去修改每個Makefile裡-L和-I引數了,也不用再去設定LD_LIBRARY_PATH或者改寫ld.so.conf檔案了。