2016-03-30 88 views
1

我想交叉編譯C++程序,它使用一些OpenSSL的文件:Eclipse CDT的 - 鏈接libcrypto.so交叉編譯

#include <openssl/x509.h> 
#include <openssl/pem.h> 
#include <openssl/bio.h> 
#include <openssl/err.h> 

因爲交叉編譯器(/opt/crosstool/arm-none-linux-gnueabi/include)的路徑是不同的默認/usr/include路徑,其中所有的OpenSSL頭文件,我必須設置包含路徑,右鍵單擊項目 - >屬性 - > C/C++常規 - >路徑和符號 - >添加... - >/usr/include以包括頭文件。

同樣與libcrypto.so:

... C/C++常規 - >庫 - >添加... crypto

... C/C++常規 - >庫路徑 - >添加... /usr/lib/i386-linux-gnu(此文件夾中,我發現了librypto.so)

當構建項目中,我得到以下錯誤:

/opt/crosstool/arm-none-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libcrypto.so when searching for -lcrypto 
    /opt/crosstool/arm-none-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /usr/lib/i386-linux-gnu/libcrypto.a when searching for -lcrypto 
    /opt/crosstool/arm-none-linux-gnueabi/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lcrypto 

似乎是一個鏈接錯誤,但我不知道爲什麼。感謝幫助。

+0

你正在使用哪個版本的OpenSSL?它來自哪裏:'/ opt/crosstool/arm-none-linux-gnueabi'? (好吧,我正在設置一個測試裝置來測試一個答案)。 – jww

+0

我使用1.0.1版本。路徑是我的交叉編譯器的路徑,它是安裝我的交叉編譯器後的默認路徑。在這個路徑中,我有我的嵌入式硬件所需的所有文件夾,一些額外的硬件庫以及默認庫(和頭文件),但不包括OpenSSL庫。我試圖將libcrypto.so文件複製到交叉編譯器的文件夾中,但仍然是相同的錯誤。 – Snowman

回答

1

好的,終於解決了這個問題。我不知道我必須配置OpenSSL才能使用它與ARM進行交叉編譯。

剛開始你的終端,輸入:

export cross=arm-none-linux-gnueabi- 
    cd openssl-1.0.1s 
    ./Configure dist --prefix=$HOME/opensslArm 
    make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib" 
    make install 

現在你有一個在你的主目錄下名爲opensslArm文件夾。在這個文件夾中你會找到所有的頭文件和庫本身。因此,在Eclipse中,將opensslArm/include的路徑添加到您的includes和opensslArm/lib庫路徑中。在這裏尋找更多的信息:Cross Compile OpenSSH for ARM