2012-12-01 54 views
3

我試圖將現有的Linux C++應用程序移植到Raspberry Pi。該應用程序依賴於許多第三方庫。非繁瑣的方式來交叉編譯Raspberry Pi的第三方庫

我正在運行Ubuntu 12.04,並使用crosstools-ng構建了我的GCC 4.7交叉編譯器(後來才意識到我可以使用官方提供的工具鏈保存自己的麻煩!)我能夠爲我的樹莓生成可執行文件。到現在爲止還挺好。

然後我開始嘗試構建我的所有第三方庫依賴項:GLib,SDL和其他幾個。這些依賴關係中的每一個都有自己的依賴關係等等。很快就明白了,手動構建所有這些庫的ARM版本將是非常乏味和耗時的。有更容易的方法嗎?

+0

你嘗試過建立在raspi本身?不需要以這種方式進行交叉編譯 –

+0

@dwelch我說*非*的。 :)我期望的是,在樹莓上編譯類似Boost的東西會非常糟糕。 –

+0

只是想幫忙,如果那是你的目標,你仍然可以嘗試。或者在你的應用程序中沒有這麼多的依賴關係,使它們更具可移植性。 –

回答

2

在發現ScratchBox2後,我設法湊齊了一些可行的東西。 ScratchBox2是一個工具,它有助於創建適合交叉編譯的chroot並使用QEmu,允許您在計算機上運行外部CPU二進制文件。就我而言,ScratchBox2調解對Raspbian的自包含沙箱的訪問,Raspbian是針對Raspberry Pi優化的Debian的ARM變體。

結果是,一旦我完成了所有的設置,並且設置完成需要花費幾個小時的時間,我可以簡單地輸入sb2 -eR apt-get install ...以獲得所需的ARM軟件包。這是魔術的東西。 (警告:我沒有在Ubuntu 12.10中使用官方ScratchBox2軟件包,所以最好從源代碼自己構建它,使用official Git repo的最新修訂版。)

爲了幫助您重現我的設置很容易,我已經在Github上爲我的虛擬機配置了Vagrant配方:https://github.com/nickhutchinson/raspberry-devbox。圍繞邊緣幾乎肯定是粗糙的 - 這是我使用Puppet配置工具的第一次體驗 - 但希望其他人可以使其更加強大。

我發現這些資源非常有用:

2

查看openembedded build framework。它旨在自動執行交叉編譯的所有繁瑣任務。

的OpenEmbedded的項目已增加了raspberry-pi target

支持您可以使用OpenEmbedded的發行版SDK像pokyangstrom來設置的東西,並讓你開始。

Poky可以吐出rpm,ipk,deb。他們中的大多數人將在其他發行版上工作。所以你不需要使用poky發行版本身。

Here是使用帶有覆盆子丕

的OpenEmbedded後,ü可以創建一個配方bitbake的或定義爲您的應用依賴定製的OE層的指南。看看有關文檔的poky手冊。

有或沒​​有開放式嵌入的另一種選擇是在qemu-arm機器上加載完整的開發環境並在生產映像上使用二進制文件。 Openemmbedded/poky具有qemu-arm sdk圖像的目標圖像配方。