OPENSSL版本不兼容造成的undefined reference

最近由于项目需要,在linux下需要使用openssl进行加密和解密。

在官网下下来openssl make一切正常,编译程序时出现了

undefined reference to `BN_is_zero'

一般这种链接错误也就是链接的库没有对应的函数,但是使用 

nm -D libcrypto.so.1.1

查看编译好的库却能看到


00000000000b4190 T BN_is_zero


说明该函数是存在的。

但是编译完,链接却链接不上,百思不得其解。后来偶然看见了openssl1.0.1c的源代码中对BN_is_zero的定义如下

#define BN_is_zero(a)       ((a)->top == 0)

在1.0.1中对BN_is_zero的定义其实是一段宏,而在1.1.0h中的bn.h中却是这么写的

int BN_is_zero(const BIGNUM *a);
1.1.0中就将BN_is_zero声明为函数了。后来发现编译使用的centos中自带了openssl1.0.0,因此链接时不指定-L目录的情况下链接的其实是系统默认的openssl1.0.0,当然不存在这个函数,使用-L指定链接目录并将该目录添加到LD_LIBRARY_PATH中就可以编译运行了。



发布了10 篇原创文章 · 获赞 10 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览