Openssl 库的静态链接

来源:互联网 发布:squid与nginx 编辑:程序博客网 时间:2024/06/07 22:08

链接Openssl库的时候,遇到一个问题:明明在Makefile里指明了link指定的.a文件(openssl-1.0.1c/lib/libssl.a 和 openssl-1.0.1c/lib/libcrypto.a),但build完成后的可执行程序在运行时还是会去link操作系统下的Openssl动态库 /lib64/libssl.so.10,难道不是静态链接的?

(假设可执行文件是 /home/yasi/mytest,用 LD_DEBUG=libs /home/yasi/mytest -v 可以看到 mytest 尝试加载了哪些 .so 动态库文件,例如这里会看到下面的结果

     12354:     find library=libssl.so.10 [0]; searching
     12354:      search cache=/etc/ld.so.cache
     12354:       trying file=/usr/lib64/libssl.so.10

......

     12354:     calling init: /usr/lib64/libssl.so.10

......

     12354:     calling fini: /usr/lib64/libssl.so.10 [0] )


原因在于,Makefile中,除了指明link openssl-1.0.1c/lib/libssl.a 和 openssl-1.0.1c/lib/libcrypto.a 以外,还有 -lssl -lcrypto 这样的设置。


注释了 -lssl -lcrypto 之后,重新build,生成的可执行文件在运行时就不再去link 系统下的 Openssl动态库 /lib64/libssl.so.6 了。