1. 程式人生 > >交叉編譯引數 -I -L -l 詳解

交叉編譯引數 -I -L -l 詳解

這裡不管是你用gcc還是用arm-linux-gcc都是實用的。

當你下載一些freetype,libjpeg。你得先.configure,make make install  這裡我主要講一下一些引數怎麼配置,具體怎麼安裝這些庫檔案,下篇文章將重點講解。

這三個引數是很重要的。

 --build=BUILD     configure for building on BUILD [guessed]  /* 在哪個平臺上進行編譯,預設pc機,這裡不用修改 */
 --host=HOST       cross-compile to build programs to run on HOST [BUILD]   /* 編譯出的檔案執行在哪裡,預設pc機 */

  --prefix=PREFIX         install architecture-independent files in PREFIX    /* 安裝的檔案路徑,自己指定 */

我習慣如下配置:

./configure --prefix=$PWD/tmp/      --host=arm-linux      /* 是在當前路徑下面建立了一個tmp檔案目錄,安裝在tmp目錄*/

make && make install

上面講的是安裝庫檔案,下面我們講講怎麼運用這些庫檔案來編譯我們的程式。

先講講arm-linux-gcc幾個常用的引數

-I   指定我們程式所需的標頭檔案所在的路徑,也就是我們剛剛編譯出來庫檔案裡面的標頭檔案路徑

-L(大寫)  指定我們程式所需的庫檔案所在的路徑,也就是我們剛剛編譯出來庫檔案裡面的庫檔案路徑 

-l(小寫)   指定我們所需要的庫,

上面這三個引數是很重要的,一定要理解過來加以運用。

方法一:我們交叉編譯的時候自己去指定所需要的庫檔案,標頭檔案。

arm-linux-gcc -o jpg2rgb jpg2rgb.c -I /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/include -L /work/projects/13.libjpeg/libjpeg-turbo-1.2.1/tmp/lib -ljpeg

上面這種方法實在是太麻煩了,不建議使用,除非你只用一次這個庫檔案或者標頭檔案。

方法二:

這裡我擴充套件一點知識,就拿交叉編譯工具鏈來說,我們用arm-linux-gcc的時候虛擬機器怎麼能夠識別,我們沒有跟詳細的交叉編譯路徑,這裡我得說一下,我們把這個路徑一般放在環境變數中區了,當編譯器在usr/lib 這些裡面找不到的的時候就回去環境變數中找。

上面我們寫的程式使用arm-linux-gcc來編譯的,但是需要運用到jpeg庫檔案,我們可以把這些庫檔案,標頭檔案拷貝到交叉編譯下面的庫檔案和標頭檔案,這樣編譯器就可以在arm-linux-gcc下面找到標頭檔案,庫檔案了。具體在交叉編譯器那個目錄下,這個自己琢磨,因為不同版本編譯器的路徑可能不一樣。下面我列出常用的arm-linux-gcc-4.3.2的標頭檔案和庫檔案的路徑。

/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include     /* 標頭檔案路徑 */

/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib     /* 庫檔案路徑 */

強調一下:複製庫檔案的時候加 -d 選項  就是保持連結關係。