./../lib/librdkafka.so: undefined reference to ‘deflateBound@ZLIB_1.2.0‘ /usr/1ib64/1ibssl.so.10: un
Linux C++ 链接kfaka动态库,编译报错
一.报错信息
./…/lib/librdkafka.so: undefined reference to ‘deflateBound@ZLIB_1.2.0‘
/usr/1ib64/1ibssl.so.10: undefined reference to ‘memcpy@GLIBC_2.14‘
二.分析报错
1.根据上图的报错提示,可以看出是链接时librdkafka.so和1ibssl.so.10依赖的函数定义未找到,同时该函数依赖于ZLIB_1.2.0 、GLIBC_2.14。
2.查看当前系统的GLIBC库
strings /lib/tls/libc.so.6 | grep GLIBC
执行结果并没有匹配的GLIBC_2.14,所以报错了。
三、解决方法
1.升级GLIBC
这种方法容易导致系统崩溃,不建议在生产环境上升级。
2.降librdkafka的版本
这个问题的本质就是,给的librdkafka.so的版本与当前系统不匹配,既然不匹配,就找个匹配的。
2.1 下载历史版本的librdkafka
不知道怎么找版本的话,就选大版本一个一个试,我尝试了最新版本、v2.0.0、v1.0.0(如果系统比较老,优先选1.0.0)。
https://github.com/confluentinc/librdkafka/releases/tag/v1.0.0
2.2 源码编译,生成librdkafka.so 和librdkafka++.so
1.解压
tar librdkafka-1.0.0.tar.gz
2.执行命令
cd librdkafka-1.0.0
./configure
make
make install
3.拷贝librdkafka.so 和librdkafka++.so到需要的文件夹下
执行完上面的命令,src和src-cpp分别会出现librdkafka.so 和librdkafka++.so,拷贝librdkafka.so 和librdkafka++.so到需要的文件夹下,重新编译自己的程序。