自己总结OpenSSL的变化

时间:2022-08-14 13:10:38

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

这么多情况,真是好烦~