2016-07-31 80 views
0

我用Raspberry Pi的C編寫了一個簡單的加密程序。它成功編譯爲我的X86 CPU與gcc encoder.c -lcrypto -o編碼器(我安裝了libssl-dev),但是當我想交叉編譯它(使用arm-linux-gnueabihf-gcc)時,此錯誤發生:交叉編譯openssl C應用時出錯

$ arm-linux-gnueabihf-gcc encoder.c -lcrypto -o encoder 
    In file included from ./encoder.c:4:0: 
    /usr/include/openssl/aes.h:55:33: fatal error: openssl/opensslconf.h: No such file or directory 
    #include <openssl/opensslconf.h> 
            ^
    compilation terminated. 

如何交叉編譯openssl C應用程序的Raspberry Pi?

+0

最簡單的方法可能是通過SSH進入RPI並直接操作設備。默認憑證是用戶名***'pi' ***和密碼***'樹莓***'。否則,您需要設置交叉編譯的shell環境。您需要將工具鏈和標題放在路徑上,並且需要設置一些變量,例如'CROSS_COMPILE'。檢出[配置腳本]中的註釋(http://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/Configure)。 – jww

+0

謝謝。正如你所建議的那樣,我不能直接將armhf軟件包安裝到x86系統中。這是一個類似的問題和理由:http://superuser.com/questions/1080869/how-do-i-download-a-debian-arm-package-from-another-computer – SAP

+0

你需要直接訪問設備本地構建或您需要交叉編譯。如果您無法通過SSH連接到設備並且無法使用適當的工具鏈進行交叉編譯,那麼您無法爲該設備構建程序。 – jww

回答

0

你最大的問題是你的交叉編譯器試圖使用build(和你的x86機器一樣)頭文件,它也會很樂意嘗試在鏈接時使用錯誤的庫(當然還有鏈接失敗)。很長一段時間有--sysroot option可以解決這個問題,你只需要爲目標機器正確設置sysroot,並且如果你已經有了交叉編譯器的機會,你是否已經有了一些sysroot。你只需要知道正確的路徑(根據你在哪裏以及如何安裝交叉編譯器),編譯和安裝openssl本身(交叉編譯openssl不好玩,順便說一下),然後你就可以交叉編譯一些東西openssl爲你的Pi。

正如已經指出的意見,建立在設備上是比較容易的方式,但皮是緩慢的,所以有選擇—易於安裝和緩慢的基礎上PI或比較硬的交叉編譯設置和快速構建在x86機。

作爲替代方案,您可以嘗試使用專門的交叉編譯構建環境,如OpenEmbedded,BuildRoot或OpenWRT,但這也可能是一個簡單程序的矯枉過正。

+0

你是絕對正確的親愛的羅馬希姆莫夫。我通過將必要的文件與-L&-I一起傳輸到我的電腦來解決此問題。你提出更好的解決方案。但是,我真的很困惑。由於「libc6-dev-armel-cross」包,我可以用-sysroot選項交叉編譯簡單的c代碼。爲什麼我不能在這種情況下使用這種交叉包? – SAP

+0

@SAP:也許有些事我不知道Debian交叉工具鏈,從來沒有實際使用過。看看[在這個問題](http://stackoverflow.com/questions/17603213/cross-compilation-gcc-ignores-sysroot),也許它接近你的特定情況。 –