链接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 了。