我在 Windows 上工作,在 Visual Studio 2019 中,使用 librdkafka.redist NuGet 包 v1.50。
我已经将 librdkafka producer.cpp 示例代码复制/粘贴到我的空 C++ 项目中,仅将一行更改为如下:
#include <librdkafka/rdkafkacpp.h>
我还修改了 build/native/librdkafka.redist.targets,将出现的“librdkafka.lib”替换为“librdkafkacpp.lib”,因为我正在使用 C++。
在所有情况下,命令行参数都是“127.0.0.1 test”。我在本地运行 Kafka,主题是“测试”。
使用此设置,项目作为发布可执行文件构建并运行得很好。我可以键入要生成的字符串,它们是为主题测试而生成的。
如果我切换到调试配置(32 位或 64 位,没关系),程序构建得很好,但在运行它时,它会在尝试调用时立即崩溃:
conf->set("bootstrap.servers", brokers, errstr)
发生此崩溃时,经纪人确实是“127.0.0.1”。
这是在调用之后:
RdKafka::Conf* conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
我不希望进入librdkafkacpp 代码,但它会很好地在运行调试可执行文件时实际正常运行。
我还证明了即使我不在调试器下运行调试可执行文件也会失败。它在 64 位 exe 中因此错误而崩溃。
Unhandled exception at 0x00007FF917F8C3F9 (msvcr120.dll) in KafkaFun.exe: 0xC0000005: Access violation reading location 0x0000002D4A150000.
这是 32 位 exe 中的错误:
Unhandled exception at 0x0100F41C (msvcr120.dll) in KafkaFun.exe: 0xC0000005: Access violation reading location 0xCD2BC8B0.
在我构建调试可执行文件时,它们显然存在严重问题。你知道问题是什么吗?