2017-05-22 180 views
0

在我的Windows 7虛擬機上編譯openssl-1.1.0e已經很艱難。在Windows上使用msys2編譯openssl-1.1.0e

首先,使用msys2 shell中的以下命令打包一些msys2包;

pacman -S make gcc perl 

源配置有;

./Configure mingw 

然後;

make depend && make 

存在文件問題;

crypto/init.c 
crypto/dso/dso_win32.c 

兩人都抱怨Windows的功能。添加;

#include <windows.h> 

兩者在與其他包括頂部解決了這個問題。

不幸的是,現在它抱怨了一點點,目前互聯網上沒有任何東西可以提供幫助。這是重要的東西;

make[2]: Entering directory '/builds/openssl-1.1.0e' 
perl ./util/mkrc.pl libcrypto-1_1.dll | windres --target=pe-i386 -o rc.o 
LD_LIBRARY_PATH=: gcc -DOPENSSL_USE_APPLINK -DDSO_WIN32 -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="/usr/local/ssl" -DENGINESDIR="/usr/local/lib/engines-1_1" -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE -m32 -Wall -O3 -fomit-frame-pointer -D_MT -D_WINDLL -static-libgcc -shared -Wl,-Bsymbolic -Wl,--out-implib,libcrypto.dll.a crypto.def rc.o -o ./libcrypto-1_1.dll -Wl,--whole-archive ./libcrypto.a -Wl,--no-whole-archive -lws2_32 -lgdi32 -lcrypt32 
Cannot export RAND_event: symbol not defined 
Cannot export RAND_screen: symbol not defined 
./libcrypto.a(uplink.o):uplink.c:(.text+0x5e): undefined reference to `_sntprintf' 
./libcrypto.a(uplink.o):uplink.c:(.text+0x75): undefined reference to `_tcscpy' 
./libcrypto.a(uplink.o):uplink.c:(.text+0xcd): undefined reference to `_tcscpy' 
./libcrypto.a(uplink.o):uplink.c:(.text+0x14e): undefined reference to `_tcscpy' 
./libcrypto.a(uplink.o):uplink.c:(.text+0x179): undefined reference to `_tcscpy' 
collect2: error: ld returned 1 exit status 
make[2]: *** [Makefile.shared:296: link_shlib.mingw] Error 1 
make[2]: Leaving directory '/builds/openssl-1.1.0e' 
make[1]: *** [Makefile:725: libcrypto.dll.a] Error 2 
make[1]: Leaving directory '/builds/openssl-1.1.0e' 
make: *** [Makefile:128: all] Error 2 

老實說我很茫然。有什麼想法嗎?

+0

爲什麼不使用Pacman只安裝OpenSSL的?如果你真的想自己構建它,你應該使用[官方MSYS2 openssl PKGBUILD腳本](https://github.com/Alexpux/MINGW-packages/tree/master/mingw-w64-openssl)作爲起點。 –

回答

1

應該沒有理由對OpenSSL源進行更改,以使其與mingw/msys2一起使用。沒有這些變化,它編譯得很好 - 你的問題幾乎肯定是環境問題。獲取OpenSSL源代碼的乾淨副本,然後檢查下面的內容。

我注意到你的問題,你已經安裝了msys2 gcc。這很可能是您的問題的根源。做mingw編譯的重點是使用mingw編譯器生成本地windows可執行文件/庫。確保mingw編譯器在任何msys2編譯器之前出現在您的路徑上(您甚至可以只刪除msys2 gcc軟件包)。

需要注意的第二件事情是配置腳本實際上有兩個不同的mingw目標:mingw和mingw64。您需要確保您使用的是正確的,並且它與您正在使用的mingw編譯器版本相匹配。

另一件要檢查的是你的Perl版本。有時,依賴於你的PATH,即使你已經安裝了msys2 perl,你也可以選擇錯誤的perl版本。如果在msys2實例之前PATH上存在不同版本的perl,則可能會出現問題。從msys2 Shell執行perl -v並檢查它看起來是這樣的:

This is perl 5, version 22, subversion 1 (v5.22.1) built for x86_64-msys-thread-multi