自己总结OpenSSL的变化

经过查看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/cyg1-$(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这两个文件。

这么多情况,真是好烦~

原文地址:https://www.cnblogs.com/findumars/p/6372288.html