【问题标题】:Undefined reference to sasl_x when build构建时对 sasl_x 的未定义引用
【发布时间】:2018-09-02 14:01:48
【问题描述】:

我正在尝试使用 librdkafka 库通过 gcc 编译我的程序,

我收到这种对 sasl_something 的未定义引用的错误

//usr/local/lib/librdkafka.a(rdkafka_sasl_cyrus.o):在函数rd_kafka_sasl_cyrus_close': /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:409: undefined reference tosasl_dispose' //usr/local/lib/librdkafka.a(rdkafka_sasl_cyrus.o): 在函数rd_kafka_sasl_cyrus_recv': /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:74: undefined reference tosasl_client_step' /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:100:未定义对sasl_errdetail' /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:112: undefined reference tosasl_getprop'的引用 /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:116:未定义对sasl_getprop' /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:120: undefined reference tosasl_getprop'的引用 //usr/local/lib/librdkafka.a(rdkafka_sasl_cyrus.o): 在函数rd_kafka_sasl_cyrus_client_new': /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:462: undefined reference tosasl_client_new' /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:484: 未定义引用sasl_client_start' /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:502: undefined reference tosasl_errdetail' /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:473: 未定义引用sasl_listmech' /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:466: undefined reference tosasl_errstring' //usr/local/lib/librdkafka.a(rdkafka_sasl_cyrus.o): 在函数rd_kafka_sasl_cyrus_global_init': /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:604: undefined reference tosasl_client_init' /home/ilan/librdkafka-master/src/rdkafka_sasl_cyrus.c:606:未定义对“sasl_errstring”的引用

我的makefile看起来像这样

LIBS = -L ../utils -lutils -L ../network -lnetwork -Wl,-Bstatic -lev -ljansson -lmpdec -lrdkafka -lrdkafka++ -lz -llz4 -lssl -lcrypto -lhiredis -Wl,- bdynamic -lm -lpthread -ldl -lcurl -lstdc++

我确定库有问题,但无法弄清楚到底是什么,

也许使用 pkg-config rdkafka 可以解决问题,但我不知道如何在这里使用它。

你能建议吗?

【问题讨论】:

  • 来自 cyrus-sasl 库的符号未知。添加 -lsasl2 应该可以解决问题。
  • 谢谢,确实解决了这个问题,但又造成了另一个问题/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libsasl2.a(otp.o): In function 'bin2hex': (.text+0xbf0): multiple definition of 'bin2hex' ../utils/libutils.a(ut_misc.o):/home/ilan/program-master/utils/ut_misc.c:181: first defined here 更长,但就是这样的问题
  • 我正在为您最初的问题写更详细的答案。您是否有可能在 /home/ilan/program-master/utils/ut_misc.c 中有自己的 bin2hex 函数实现?

标签: c makefile apache-kafka libraries pkg-config


【解决方案1】:

Cyryus SASL 未链接。库通常命名为 sasl2,因此添加 -lsasl2 应该可以解决问题。

我刚刚在我的系统(Gentoo Linux)上安装了 rdkafka,它的 pkg-config 文件包含 -lsasl2。所以是的。使用 pkg-config 也应该可以解决所描述的问题。

查看如何在 makefile here 中使用 pkg-config。

要获取私有库,请使用:

LDFLAGS  += `pkg-config rdkafka --libs --static`

【讨论】:

  • 谢谢,但是如何在 makefile 中使用 pkg-config 呢?
  • 我在使用 -lsasl2 时收到此错误:/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libsasl2.a(otp.o): In function 'bin2hex': (.text+0xbf0): multiple definition of 'bin2hex' ../utils/libutils.a(ut_misc.o):/home/ilan/program-master/utils/ut_misc.c:181: first defined here
  • 答案改进。我看过你之前关于 bin2hex 的评论。在我看来,另一个名为 bin2hex 的函数已在 /home/ilan/program-master/utils/ut_misc.c:181 中定义。如果它是您自己的 bin2hex 实现,请尝试重命名它。
  • 我认为我真正的问题是我没有安装 cyrus sasl,但是阅读他们的安装指南,我认为我没有足够的水平来完成它......我已经有编译错误了。
  • 是比较常见的包。可能它可以用包管理器安装。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 1970-01-01
  • 1970-01-01
  • 2022-10-30
相关资源
最近更新 更多