经过查看openssl源码自带的Makefile,发现:
1) 从0.9.7开始 https://www.openssl.org/source/old/0.9.x/openssl-0.9.7k.tar.gz
就有 LIBS= libcrypto.a libssl.a,而没有对ssleay32的声明。
2)1.0.1c里也有:
LIBS= libcrypto.a libssl.a
但是还多了:
@set -e; if [ -n "$(SHARED_LIBS)" ]; then \ tmp="$(SHARED_LIBS)"; \ for i in $${tmp:-x}; \ do \ if [ -f "$$i" -o -f "$$i.a" ]; then \ ( echo installing $$i; \ if [ "$(PLATFORM)" != "Cygwin" ]; then \ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \ else \ c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \ cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \ chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \ fi ); \ if expr $(PLATFORM) : 'mingw' > /dev/null; then \ ( case $$i in \ *crypto*) i=libeay32.dll;; \ *ssl*) i=ssleay32.dll;; \ esac; \ echo installing $$i; \ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \ chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new; \ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$i ); \ fi; \ fi; \ done; \ ( here="`pwd`"; \ cd $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR); \ $(MAKE) -f $$here/Makefile HERE="$$here" link-shared ); \ if [ "$(INSTALLTOP)" != "/usr" ]; then \ echo 'OpenSSL shared libraries have been installed in:'; \ echo ' $(INSTALLTOP)'; \ echo ''; \ sed -e '1,/^$$/d' doc/openssl-shared.txt; \ fi; \ fi
所以,在mysy(mingw)静态编译的情况下,永远不会生成ssleay32.dll等文件。
3)使用VS编译的话,做openssl 1.1之前,无论静态还是动态,都会生成ssleay32.lib libeay32.lib这两个文件。
但是从openssl 1.1开始,无论动态还是静态,都会生成ssl.lib和crypto.lib这两个文件
结论:要想彻底搞明白:
1. 使用VS把1.1的第一个版本和1.0.2的最后一个版本,使用相同的编译条件,亲自编译一遍,看看生成结果的文件名称的是否不同。
2. 使用MSYS(mingw)对1.0.1的某个版本,动态和静态版本分别编译一遍,生成结果的文件名称应该是不同的。对于1.1版本和1.0.2版本,不用试,多半结果是相同的。0.9.7版本也可试试。
3. 从openssl.org官网 和 https://github.com/openssl/openssl/releases 不同地点下载的源代码分别编译试试,看看结果是否相同。
4. 可能也不用想那么多,mingw静态编译的结果,一定是ssl.a和crypto.a这两个文件。因为在make之前,必须运行./Configure命令,所以只能在msys下运行,但出来的结果还是windows的。
5. 但是如果是在windows下mingw动态编译(不使用msys),可能不需要运行./Configure,但生成的结果多半是ssleay32.lib libeay32.lib这两个文件。
这么多情况,真是好烦~