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中就可以编译运行了。



猜你喜欢

转载自blog.csdn.net/hnlylyb/article/details/80677758