美文网首页
win下qt编译librdkafka

win下qt编译librdkafka

作者: dhz120 | 来源:发表于2021-11-02 10:01 被阅读0次

    windows 下使用 Qt 的 mingw81_64 编译 librdkafka , 生成静态库。
    librdkafka版本v1.8.2, 源码地址: https://gitee.com/dhz120/librdkafka.git

    编译

    1. 下载源码,解压
    2. 在Qt Creator中加载源码:文件->打开文件或项目->找到librdkafka根目录下的CMakeLists.txt
    3. 此时,直接编译的话,生成的是动态库。如果需要静态库,需要修改根目录的CMakeLists.txt, 将RDKAFKA_BUILD_STATIC设置为ON,示意如下:
    #option(RDKAFKA_BUILD_STATIC "Build static rdkafka library" OFF)
    option(RDKAFKA_BUILD_STATIC "Build static rdkafka library" ON)
    

    注意:

    1. 如果之前编译过动态库,修改完上边宏定义之后,需要将build目录的内容手动删掉后,重新编译,才会生成对应的静态库。
    2. librdkafka会自动识别本机有没有装openssl, 如果装了,则编辑的库中包含ssl部分,否则没有。
    1. 编译完成之后,会在build-librdkafka-xxx/src下生成静态库librdkafka.a

    会在 build-librdkafka-xxx/generated下生成config.h,这里边包含各种宏定义,使用静态库的时候需要把这个头文件也导入进来。(不确定有没有用

    静态库的使用

    在pro/pri中导入静态库,需要注意:

    1. 增加宏定义 LIBRDKAFKA_STATICLIB
    2. 导入静态库 LIBS += 静态库位置
    3. 导入其他依赖库 LIBS += -lws2_32 -lsecur32 -lcrypt32
    4. 导入头文件:config.hrdkafka.h

    注意:2和3的的顺序不能写反了,否则编译报错。

    示意如下(含win/linux):

    DEFINES += LIBRDKAFKA_STATICLIB
    
    win32 {
    LIBS += $$PWD/lib/win/librdkafka.a
    LIBS += -lws2_32 -lsecur32 -lcrypt32
    
    } else {
    LIBS += $$PWD/lib/linux/librdkafka.a
    LIBS += -lpthread -ldl -lz -lssl -lcrypto
    }
    
    HEADERS += \
        $$PWD/rdkafka.h
    

    遇到的问题

    1. undefined reference to __imp_rd_kafka_xxx, 原因:pro/pri中只导入的静态库,即只写了LIBS += $$PWD/lib/win/librdkafka.a
    2. undefined reference to __imp_ioctlsocket, 原因,没有加入其他依赖, 即没写LIBS += -lws2_32 -lsecur32 -lcrypt32
    3. 程序运行起来之后,能创建topic, 但是不能收发消息,可能是集群中kafka的配置设置的是master/slaver1之类的,没用实际的地址。这时候需要修改本机hosts文件,添加对应的映射。参考如下:
      hosts路径:C:\WINDOWS\system32\drivers\etc\hosts
    # 添加如下映射
    192.168.100.250 master
    192.168.100.201 slaver1
    192.168.100.202 slaver2
    
    1. linux下编译遇到问题:
    • undefined reference to crc32, 解决办法:LIBS += -lz
    • undefined reference to BIO_new_mem_buf, 解决办法:LIBS += -lssl -lcrypto

    相关文章

      网友评论

          本文标题:win下qt编译librdkafka

          本文链接:https://www.haomeiwen.com/subject/esjxzltx.html