2013-05-15 138 views
3

我想跨編譯一個項目和一個庫,它依賴於在嵌入式系統上使用。應用程序和依賴項都使用automake。我能夠編譯圖書館沒有太多問題。用automake交叉編譯

./configure --host=powerpc-none-linux-gnuspe --prefix=/home/me/build_dir 
make 
make install 

我用--prefix使make install沒有把輸出在我的文件系統與所有的x86庫的。我也嘗試在運行配置時不使用--prefix,而是在運行make install之前設置DESTDIR環境變量。他們似乎也做同樣的事情。我希望能夠編譯/home/me/build_dir並將其放在嵌入式目標文件系統的根目錄下。我希望--prefix沒有硬編碼我的主機上的絕對路徑。

然後我試圖穿越編譯使用這個庫的應用:

./configure --host=powerpc-none-linux-gnuspe --with-sysroot=/home/me/build_dir 

我遇到了兩件事情。配置腳本已成功完成,但第一次make失敗,因爲找不到其中一個標頭。它正在查看/usr/include而不是/home/be/build_dir/usr/include。不應該--with-sysroot選項也修改包含目錄或我錯過了什麼?

而且,我得到一個警告

libtool: link: warning: library libstdc++.la was moved 

,我感到我已經錯過了一些感覺。這個警告是我可以安全地忽略的東西,還是我在某個地方搞砸了?

總結我的問題: 1)​​和make DESTDIR=x install之間有什麼區別嗎? 2)什麼是正確的方式來更新庫頭的搜索路徑? 3)爲什麼我會收到有關libstdC++的警告,這是我應該擔心的事情嗎?

回答

3

對於您的情況,您應該使用DESTDIR。設置--prefix將意味着生成的程序將預計安裝在--prefix的位置。另一方面,DESTDIR是一個純粹的安裝工件,它只是在每個路徑開始安裝時加上前綴。產生的產品仍然預計安裝在--prefix位置。如果要將結果安裝到目標主機上,請將--prefix設置爲它將要使用的位置,並使用DESTDIR將其放置在其他位置。

我相信只要在configure腳本中設置--sysroot是不夠的,但我不確定。我認爲設置sysroot,而configure運行,但它不設置生成文件。

我最常做的是創造一個調用與適當的--sysroot=dir選項真正的編譯器編譯一個shell腳本,然後使用該包裝的編譯器名稱configure。這樣做更簡單,而不是試圖讓編譯器的所有調用在外部添加--sysroot標誌。

我不確定libstdc++警告。 libstdc++是編譯器的一部分,不是sysroot的一部分...?

ETA:

通過腳本包裝我的意思是創建一個名爲腳本的東西像sysroot-gcc

#!/bin/sh 
exec real-gcc --sysroot=/some/sysroot "[email protected]" 

,那麼你可以運行configure CC=sysroot-gcc。你可以隨心所欲地做到這一點;我有一個通用腳本,用於解析名稱($0),並從中獲取sysroot名稱和工具名稱(gccg++等),以便我可以爲所有工具重新使用該腳本。

+0

感謝您的有用信息。我不確定我是否理解shell腳本包裝器的含義。 – zmb