2013-11-24 241 views
8

我在我的c代碼中使用include:< openssl/md5.h>。當我與「海灣合作委員會」編譯它的編譯器,我沒有任何錯誤,但是當我用交叉編譯器編譯「在arm-linux的-gnueabi-gcc的」我有以下錯誤:交叉編譯「OpenSSL」錯誤

/usr/include/openssl/e_os2.h:56:33: fatal error: openssl/opensslconf.h: No such file or directory 
compilation terminated. 

我認爲,這個錯誤是因爲我在交叉編譯文件夾「/ usr/arm-linux-gnueabi-gcc」中沒有openssl庫。

任何人都可以說我是否這是錯誤的原因?我如何爲交叉編譯器安裝openssl庫?

我開始交叉編譯,而且我對此沒有太多的瞭解。 感謝您的時間!

+0

您是否找到解決方案?我也碰到了這個問題。我希望你在9個月大的時候找到答案。如果你找到解決方案,然後回答它。 – neckTwi

回答

0

曾經爲特定平臺構建的庫將用於特定平臺,只有在其二進制文件兼容時才能用於其他平臺。

對於交叉編譯,您可能還需要不同平臺的二進制文件。

關於這個錯誤,似乎你沒有提到包含OpenSSL頭文件的路徑。

沒有庫,你會得到鏈接錯誤,而不是編譯器錯誤。

在這種情況下,編譯器以某種方式無法找到頭文件。所以,確保提供包含路徑。

+0

我已經提到了包含在我的c代碼中。我寫的include路徑如下:'#include '。我認爲我必須編譯openssl庫到交叉編譯?但我怎麼能做到這一點? – user2984715

+0

我認爲這是一個小姐comentary – delive

8

我知道這個問題有點舊了,但是因爲我遇到了同樣的問題,所以我將在此留待以供將來參考。

我發現的解決方案是使用安裝的交叉編譯器手動編譯OpenSSL,然後將其手動安裝到交叉編譯庫文件夾。

首先,我安裝了交叉編譯器(我使用Ubuntu 14.04)。我安裝了C編譯器和C++編譯器。我還安裝了兩個交叉編譯器工具鏈,一個帶有硬浮點支持(arm-linux-gnueabihf),另一個則沒有(arm-linux-gnueabi)。創建兩個目錄(如問題中提到的)/usr/arm-linux-gnueabi/usr/arm-linux-gnueabihf,其中應該安裝交叉編譯的庫。

sudo apt-get install {gcc,g++}-arm-linux-gnueabi{,hf} 

其次,克隆OpenSSL的Git倉庫,並檢查出的版本我感興趣的(1.0.2):

git clone https://github.com/openssl/openssl 
git checkout OpenSSL_1_0_2  # or another version 

然後,我配置交叉編譯環境,並改變了安裝目錄(前綴),建成之後在INSTALL文件中提供的說明庫(與通過強制使用特定的交叉編譯工具鏈):

export CROSS=arm-linux-gnueabi # or arm-linux-gnueabihf 
export AR=${CROSS}-ar 
export AS=${CROSS}-as 
export CC=${CROSS}-gcc 
export CXX=${CROSS}-g++ 
export LD=${CROSS}-ld 

./Configure --prefix=/usr/${CROSS} os/compiler:${CC} 
make 
sudo make install 

呦你可以重複這個過程並用兩個工具鏈編譯(arm-linux-gnueabiarm-linux-gnueabihf)。

希望這會有所幫助。

+0

你應該考慮使用一個chroot這一點,因爲它會覆蓋系統的OpenSSL的 – h0ru5

+0

不會設置前綴夠嗎? –

+0

還沒有嘗試過,但可能是因爲不夠配置應該知道在哪裏安裝 – h0ru5