2013-11-24 64 views
8

私のCコードにinclude:< openssl/md5.h>を使用しています。私は「GCC」とそれをコンパイルすると、コンパイラ私はすべてのエラーを持っていないが、私は、クロスコンパイラでコンパイルしたときに「アーム - のlinux-gnueabi-gccの」Iは、次のエラーしている:私はことを"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 '。私はクロスコンパイルにopensslライブラリをコンパイルする必要があると思いますか?しかし、私はそれをどのようにすることができますか? – user2984715

+0

私は恋しいと思います – delive

8

私はこの質問が少し古いことを知っていますが、私は同じ問題でそれに来て以来、私は将来の参照のためにここに残すつもりです。

私が見つけた解決策は、インストールされたクロスコンパイラでOpenSSLを手動でコンパイルしてから、クロスコンパイルライブラリフォルダに手動でインストールすることでした。

まず、クロスコンパイラをインストールしました(私はUbuntu 14.04を使用しています)。私はCコンパイラとC++コンパイラの両方をインストールしました。また、ハード・フローティング・ポイント・サポート(arm-linux-gnueabihf)と1つ(arm-linux-gnueabi)のないクロスコンパイラ・ツールチェーンを2つインストールしました。クロスコンパイルされたライブラリをインストールするディレクトリが2つあります(質問に記載されています)/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

システムのopensslを上書きするので、chrootを使うことを検討してください。 – h0ru5

+0

プレフィックスを十分に設定しないでしょうか? –

+0

は試していませんが、configureはどこにインストールするかを知っていなければならないので、十分である可能性があります – h0ru5