交叉編譯引數 -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 選項 就是保持連結關係。