构建时对 sasl_x 的未定义引用

Undefined reference to sasl_x when build

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

我收到这种未定义引用 sasl_something

的错误

//usr/local/lib/librdkafka.a(rdkafka_sasl_cyrus.o): In function 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): In function 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: undefined reference to 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: undefined reference to 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): In function 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: undefined reference to 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: undefined reference to 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): In function 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: undefined reference to `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 可以解决问题,但我不知道如何在这里使用它。

能请教一下吗?

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

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

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

要同时获取私人图书馆,请使用:

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