使用msys2在Windows上编译openssl-1.1.0e

时间:2017-05-22 20:03:55

标签: openssl mingw msys2

在我的Windows 7 VM上编译openssl-1.1.0e是一条艰难的道路。

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

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

老实说,我不知所措。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

没有理由对OpenSSL源进行更改以使其与mingw / msys2一起使用。它没有这些变化就可以很好地编译 - 你的问题几乎肯定是环境问题。获取OpenSSL源的干净副本,然后检查以下内容。

我在你的问题中注意到你已经安装了msys2 gcc。这很可能是您问题的根源。进行mingw构建的重点是使用mingw编译器生成本机Windows可执行文件/库。确保mingw编译器出现在任何msys2编译器之前的路径上(您甚至可能只想删除msys2 gcc包)。

要注意的第二件事是配置脚本实际上有两个不同的mingw目标:mingw和mingw64。您需要确保使用正确的,并且它与您正在使用的mingw编译器版本匹配。

要检查的另一件事是你的perl版本。有时,依赖于你的PATH,你可以选择错误的perl版本,即使你已经安装了msys2 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