1. 程式人生 > >交叉編譯時候如何設定連線庫的搜尋路徑

交叉編譯時候如何設定連線庫的搜尋路徑

交叉編譯的時候不能使用本地(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檔案了。