web-dev-qa-db-ja.com

64ビットシステムで32ビットモードでopenSSLをコンパイルするにはどうすればよいですか?

現在32ビットモードでコンパイルする必要があるプログラムがあり(現在のところ)、実験的な暗号が含まれているバージョンのopenSSLに対してリンクする必要があります。したがって、32ビットのopenSSLをコンパイルする必要があります。使用する

./config -m32 

-m32と-m64の両方がコンパイラフラグに含まれます。

32
Gary Barker

タンブルウィードのバッジは私に戻って自分でそれに答えるように思い出させました!私がこれを機能させる方法は、使用することでした:

setarch i386 ./config -m32
28
Gary Barker

残念ながら私にとって、setarchは [〜#〜] lfs [〜#〜] システムでは有効なコマンドではなかったため、別の方法で実行する必要がありました。

./Configure shared threads zlib-dynamic --prefix=/usr --openssldir=/etc/ssl -m32 linux-generic32

注:これは、OPの希望どおりに機能させるための最小限の例です。

./Configure -m32 linux-generic32

Solaris x86マシンでコンパイルしようとした以外は、同様の問題がありました。 setarchはSolarisでは使用できないため、ここでの他の回答の1つで提案されているより単純なアプローチを使用できませんでした。

OpenSSLの「config」スクリプトはシェルラッパーで、ターゲットシステムと見なすものを決定し、「構成」Perlスクリプトを呼び出します。 Configureには多くの組み込みターゲットがあります。「Perl Configure TABLE」を使用して、それらすべてのリストを取得できます。利用可能なリストから必要なターゲットを選択する場合です。

したがって、必要と思われるターゲット以外のターゲットを強制的にビルドする場合は、「Configure」を直接呼び出して、必要なターゲットの名前を渡すことができます。たとえば、Solaris 32ビットビルドを機能させるには、次のコマンドを使用しました。

./Configure solaris-x86-cc --shared

または、元の質問の場合、それがLinuxシステムの場合は、次のように使用できます。

./Configure linux-generic32 --shared
5
harmic

Centos 5 x64で32ビットコンパイルを機能させるには、setarch-m32の両方を実行し、glibcの32ビット開発パッケージをインストールする必要がありました。

setarch i386 ./Configure --prefix=/usr linux-generic32 -m32 shared
Sudo yum install glibc-devel-2.5-118.el5_10.2.i386
make

確認のためのテストとして、ファイルコマンドを使用して結果を確認します

file libcrypto.so.0.9.8 libssl.so.0.9.8
libcrypto.so.0.9.8: ELF **32-bit** LSB shared object, Intel 80386, version 1 (SYSV), not stripped
libssl.so.0.9.8:    ELF **32-bit** LSB shared object, Intel 80386, version 1 (SYSV), not stripped

ビンゴ!

3
Rmolinger

CentOS-5.5 64ビットバージョンでopenssl-1.0.0.cをコンパイルすると、./Configure linux-generic32を実行してからmake CC="gcc -m32"が機能します。

64ビットマシンで32bアプリケーションをビルドする方法については、 this を確認してください。さまざまなプラットフォームに必要な32ビットヘッダーファイルとライブラリをインストールする方法の詳細な手順が示されています。

1
D3Hunter

Opensslの「config」ファイルを変更できる可能性があります。これは、最初にOS 64ビットまたは32ビットをチェックし、OSの構成を準備するためです。たとえば、OSは64ビットであり、configの用語を次のように変更できます。以下に置き換えx86_64 --linux?)OUT = "linux-x86_64" ;; with x86_64--linux?)OUT = "linux-generic32" ;;

0
Sara Liu