我有一個程序,目前必須編譯爲32位模式(現在),需要與包含實驗密碼的openSSL版本進行鏈接。因此我需要編譯一個32位的openSSL。使用如何在64位系統上以32位模式編譯openSSL?
./config -m32
導致-m32和-m64都包含在編譯器標誌中。
我有一個程序,目前必須編譯爲32位模式(現在),需要與包含實驗密碼的openSSL版本進行鏈接。因此我需要編譯一個32位的openSSL。使用如何在64位系統上以32位模式編譯openSSL?
./config -m32
導致-m32和-m64都包含在編譯器標誌中。
風滾草徽章提醒我回來,自己回答! 我得到這個工作的方法是使用:
setarch i386 ./config -m32
不幸的是我,setarch不是我LFS系統上的有效指揮,所以我不得不這樣做以不同的方式:
./Configure shared threads zlib-dynamic --prefix=/usr --openssldir=/etc/ssl -m32 linux-generic32
注:這是最小的例子,使其工作作爲OP願望:
./Configure -m32 linux-generic32
我有一個類似的問題,但我嘗試編譯的Solaris x86計算機上。 setarch在Solaris中不可用,所以我不能在這裏使用其他答案中建議的更簡單的方法。
OpenSSL的'config'腳本是一個shell封裝器,它決定了它認爲是目標系統的內容,然後調用'Configure'perl腳本,這個腳本完成了繁重的工作。配置有很多內置目標:您可以使用'perl Configure TABLE'來獲取所有這些目標的列表。這是從可用列表中選擇您需要的目標的情況。
因此,如果你想強制它爲一個它認爲你應該的目標以外的目標構建,你可以直接調用'Configure',傳遞你想要的目標名稱。例如,爲了讓我的Solaris 32位建設工作,我用:
./Configure solaris-x86-cc --shared
,或者在原來的問題的情況下,如果它是一個Linux系統,你可以使用:
./Configure linux-generic32 --shared
爲了得到在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
賓果!
運行./Configure linux-generic32
然後make CC="gcc -m32"
在CentOS-5.5 64位版本上編譯Openssl-1.0.0.c時適用於我。
關於如何在64位機器上構建32b應用程序,請檢查this,其中詳細介紹瞭如何在各種平臺上安裝必需的32位頭文件和庫。
可能會修改openssl中的「config」文件,因爲它會首先檢查OS 64位或32位,併爲操作系統準備配置,例如操作系統是64位,我們可以修改在配置中的術語如下 repace x86_64- -linux?)OUT =「linux-x86_64」;; 與x86_64- -linux?)OUT =「linux-generic32」;;