2

hereの指示に従って、OpenSSL の最新バージョン (openssl-1.0.1e.tar.gz) をhereからダウンロードし、Ubuntu v12.10 (32 ビット) にインストールしました。

次の 2 つの .a ファイルに静的にリンクする Eclipse CDT (v1.2.0.201212170456) に C プロジェクトがあります。

  • ホーム/usr/local/ssl/lib/libcrypto.a
  • home/usr/local/ssl/lib/libssl.a

ただし、プロジェクトをビルドすると、次のエラーが発生します。

/home/tashimaya/Applications/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /usr/local/ssl/lib/libssl.a when searching for -lssl
/home/tashimaya/Applications/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find –lssl

私のツールチェーンは CodeSourcery (Sourcery G++ Lite 2010q1-202) で、32 ビット OS 用です。

私は何を間違っていますか?

私が使用しているコンパイラコマンドライン:

arm-none-linux-gnueabi-gcc -I"/path to my/include" -O0 -g3 -Wall -c -fmessage-length=0 -v -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.c"
4

2 に答える 2

3

Ubuntu 32 ビット マシン (x86 を想定) に OpenSSL をインストールしましたが、それを ARM バイナリにリンクしようとしています。

  • /home/tashimaya/Applications/CodeSourcery/bin/../lib/gcc/arm-none-linux-gnueabi: ARM ツールチェーン
  • /usr/local/ssl/lib/libssl.a: OpenSSL の 32 ビット x86 バージョン

ARM ツールチェーン (例: ) を使用して ARM 用の OpenSSL をクロスコンパイルするarm-none-linux-gnueabi-gcc必要があります。その後、それを ARM バイナリにリンクできます。

于 2013-03-01T14:41:00.187 に答える
0

/usr/local/ssl/lib/libssl.a が期待されるサイズではないことが示されています。ファイルを試して、32ビット版または64ビット版でコンパイルしたかどうかを確認してください。また、自分のプログラムをどのようにコンパイルしているかも確認してください。両方が一致する場合、リンカー (ld) は正常にリンクします。

プログラムを 64 ビットにコンパイルし、それを 32 ビットの libssl.a とリンクすると、これは機能しません。

例:

ファイル a.out

/* kind ofoutput */ a.out: Mach-O 64-bit executable x86_64

http://unixhelp.ed.ac.uk/CGI/man-cgi?file

于 2013-03-01T12:57:01.733 に答える