RT
在 http://lwglucky.blog.51cto.com/1228348/325483 找到编译 OpenSSL 的基本方式:perl Configure VC-WIN32
ms\do_ms.bat
nmake -f ms\ntdll.mak
我都执行了,也出现了 文件夹out32dll ,里面也有 文件 ssleay32.lib 和 libeay32.lib 。现在,我在源码文件 \ssl\ssl_lib.c 里面找到了 SSL_CTX_new 的实现函数,并在其中添加了一句代码“return NULL;”,如下所示:SSL_CTX *SSL_CTX_new(SSL_METHOD *meth)
{
SSL_CTX *ret=NULL;return NULL; // 这一句代码是我添加的,而且只添加了这一句 !!

if (meth == NULL)
{
SSLerr(SSL_F_SSL_CTX_NEW,SSL_R_NULL_SSL_METHOD_PASSED);
return(NULL);
}
......
}然后我将ssl_lib.c 保存后,再次执行命令行“nmake -f ms\ntdll.mak”,发现 文件夹out32dll ,里面的 文件 ssleay32.lib 更新了。于是我用这个 新的ssleay32.lib ,写了一段测试代码:#include <stdio.h>#include "openssl/ssl.h"#pragma comment(lib, "libeay32.lib")
#pragma comment(lib, "ssleay32.lib")int main ()
{
SSL_CTX* ctx = NULL;
SSL_METHOD* meth = NULL;

OpenSSL_add_ssl_algorithms(); // 初始化
SSL_load_error_strings(); // 为打印调试信息作准备
meth = TLSv1_client_method(); // 采用什么协议(SSLv2/SSLv3/TLSv1)在此指定
ctx = SSL_CTX_new (meth); 
printf("%X\n", ctx); return 0;
}
为何 ,printf 输出的值仍然是 0xB86268 而非 0 ???
我的问题是:
  如何才能使我修改的源码生效 ??(即 在调用 SSL_CTX_new 时返回 NULL)是否我修改的源码没有生效??还是编译的方式不对 ??还是我调用的方式不对 ?? 还是其他什么原因啊?? 请各位帮帮忙指点下啊~~

解决方案 »

  1.   

    生成的库lib, 你要看是什么类型: 静态的lib, 或动态的lib你应该使用的是动态lib, 你的exe会加载这个dll, 但是你的dll没有从新编译, 所以没有用, 你可以从新再编译这个dll或者生成静态lib再到exe引用这个lib, 静态的lib大小相对会大很多
      

  2.   

    网上查到,貌似静态lib是这个命令:nmake -f ms/nt.mak 。
    我重新编译了 OpenSSL,执行完上面的命令后我执行 “nmake -f ms/nt.mak test”也有 “passed all tests”被打印出来,但是用out32文件夹下的libeay32.lib和ssleay32.lib来编译上面的测试代码时,有报错:Linking...
    libeay32.lib(bss_sock.obj) : error LNK2001: unresolved external symbol _closesocket@4
    libeay32.lib(bss_sock.obj) : error LNK2001: unresolved external symbol _shutdown@8
    libeay32.lib(bss_sock.obj) : error LNK2001: unresolved external symbol _WSAGetLastError@0
    libeay32.lib(bss_sock.obj) : error LNK2001: unresolved external symbol _recv@16
    libeay32.lib(bss_sock.obj) : error LNK2001: unresolved external symbol _WSASetLastError@4
    libeay32.lib(bss_sock.obj) : error LNK2001: unresolved external symbol _send@16
    Debug/vc6_Test.exe : fatal error LNK1120: 6 unresolved externals
    Error executing link.exe.
    Creating browse info file...vc6_Test.exe - 7 error(s), 0 warning(s)
    我也新发了一贴求助此问题:http://bbs.csdn.net/topics/390512543
      

  3.   

    确实,用了命令 “nmake -f ms/nt.mak” 然后out32产生相应的 libeay32.lib和ssleay32.lib 。
    此时,再改源码重编译就可以看到效果了。
      

  4.   

    记录一下:perl Configure VC-WIN32
    ms\do_ms.bat
    nmake -f ms\nt.mak
    清理:    nmake -f ms\nt.mak clean
        nmake -f ms\nt.mak vclean