在windows使用librdkafka的时候,遇到的问题较多,总结有如下问题:

1、编译器问题,首先最新的librdkafka项目使用了C++11相关语法,所以如果要编译该项目,必须保证编译器兼容C++11语法,也就是编译器要vs2013以上,请摒弃vs2008,vs2010;

2、部分librdkafka项目没有vs的解决方案solution,需要生成对应的解决方案,此时需要下载cmake且支持使用vs 2013以上的本地编译器(cmake3.1.3已经支持vs2017了),至于使用cmake生成solution的方法我已经在之前文章讲过,此处不再重复(注意一点就是:一般看项目下面的cmake文件夹的readme.txt一般都会有详细说明cmake生成solution的方法---特别是cmake生成solution过程需要配置的环境变量)

3、这里我下载最新的librdkafka主干项目版本是kafka_2.11-0.11.0.0.tgz,解压之后里面就已经包含对应的vs的解决方案了,路径:librdkafka-master\win32\librdkafka.sln

4、剩下的就是编译器编译问题,也总结一下:

(1)由于C++11问题,选择版本有:vs2013、vs2015、vs2017,根据网友提供建议,不建议使用vs2015(安装问题),所以直接升级到vs2017,升级后安装了win10的sdk和update3可选安装包,但是打开librdkafka项目之后,一直编译不通过,提示win7 sdk未安装(win7上使用vs2017),然后单独下载win7 sdk安装后,依然没有效果(最后本来可以解决的,但是还是使用了vs2015----解决方法:项目属性-->配置属性-->常规,然后在右侧选项中将“平台工具集”默认选择的vs141删除,即不指定使用工具集)

(2)安装vs2015,这里就是一个坑,我说网友怎么不建议使用vs2015,安装后出现问题:没有VC++项目选项卡,通过点击安装对应工具模板之后,重启第一次有模板,关闭后重新打开,模板又没有了(安装的vs2015专业版的中文版和英文版,效果都一样),第二个就是安装后卸载不了update3(因为kafka必须依赖update3更新),然后重复卸载安装都不能安装c++模板(可能是卸载不了vs2015 的update3更新--报找不到对应文件,所以卸载不掉),最后直接重装系统;然后安装了vs企业中文版本(不是专业版本),最后终于可以使用vs2015了;

(3)编译问题:打开librdkafka之后编译librdkafka工程:

报错:a.无法解析的外部符号:__iob_func       解决方法: 在C文件中(我选择的是rdkafka.c文件中)末尾添加实现:

/*
* 当libjpeg-turbo为vs2010编译时,vs2015下静态链接libjpeg-turbo会链接出错:找不到__iob_func,
* 增加__iob_func到__acrt_iob_func的转换函数解决此问题,
* 当libjpeg-turbo用vs2015编译时,不需要此补丁文件
*/
#if _MSC_VER>=1900
#include "stdio.h"
_ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);
#ifdef __cplusplus
extern "C"
#endif
FILE* __cdecl __iob_func(unsigned i) {return __acrt_iob_func(i);
}
#endif /* _MSC_VER>=1900 */

添加的原因如下:

根据关键字在网上找到一些文章描述了类似的错误,大都是找不到外部符号 __iob ,原因是 VS2010 上使用了 VC6 编译的 DLL 。虽然与我的情况不同,但是原理是一样的,我遇到的这个问题的原因是 VS2015 下使用VS2010编译的静态库,因为我用的 libjpeg-turbo静态库是从官网下载编译好的版本(应该是vs2010这样的版本编译的)。

其实 __iob_func 和 __iob 都是用来定义 stdin,stdout,stderr,只是不同的VC版本实现方式不同。

下面是VS2015的头文件corecrt_wstdio.h中对stdin,stdout,stderr定义

ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned);#define stdin  (__acrt_iob_func(0))
#define stdout (__acrt_iob_func(1))
#define stderr (__acrt_iob_func(2))

原来在 VS2015 中 __iob_func 改成了 __acrt_iob_func 

报错:b.无法解析的外部符号 __imp___vsnprintf    解决方法:在link链接库中添加legacy_stdio_definitions.lib然后编译即可解决该错误;

5、openssl安装,请下载 Win32OpenSSL-1_0_1g_5100003558626907361.exe 然后在线安装下载,将openssl/include和openssl/lib/vc添加如头文件以及lib链接库中

6、最后就是关于librdkafka使用,间后续章节介绍

关于librdkafka编译错误问题解决相关推荐

  1. KEIL-MDK编译错误问题解决办法

    KEIL-MDK编译错误问题解决办法 Error: L6218E: Undefined symbol NVIC_PriorityGroupConfig (referred from main.o). ...

  2. glm编译错误问题解决 formal parameter with __declspec(align(#39;16#39;)) won#39;t be aligned...

    參考:http://stackoverflow.com/questions/25300116/directxxmmatrix-error-c2719-declspecalign16-wont-be-a ...

  3. 龙芯平台stream编译错误问题解决

    执行命令: gcc -O2 stream.c 报错如下: Dump relocate record: stack top relocation name symbol at /tmp/ccn99HNZ ...

  4. vscode Go 1.11.4 编译错误 need Delve built by Go 1.11 or later

    更新golang的版本为1.11.4之后vscode编译错误:executables built by Go 1.11 or later need Delve built by Go 1.11 or ...

  5. u盘版linux initramfs,Linux_内核升级后 出现initramfs错误问题解决, 出现initramfs找不到/root /hos - phpStudy...

    内核升级后 出现initramfs错误问题解决 出现initramfs找不到/root /host或437或 VFS之类的提示: 1.如果root.disk是在fat32 分区上,所以内核选项要把fa ...

  6. (随时增加)linux编译错误集锦

    1.Error: Invalid function arguments provided. 错误原因:传递参数过程有错误 解决办法: a.走读代码,或者gdb调试,加打印,分析打印出现前后文的代码接口 ...

  7. Java “constant string too long” 编译错误

    这个问题是编译时错误,在 Java 的运行时没有这个限制. 当我们在 Java 编译器中输入的变量值超过 64 KB 的话,Java 编译器是不会让编译通过的,你将会得到一个 constant str ...

  8. oracle 查看 编译错误,Oracle-已编译但有错误,命令行提交包不显示结果

    开发环境名称 版本 操作系统 Windows 10 X64 Oracle win64_11gR2_database PLSQL Developer 11.0.4.1788(64 bit)01.1793 ...

  9. matconvnet 编译错误 : nvcc fatal '-DNEDBUG': expected a number

    matconvnet 编译错误 按方法Win10安装MatConvnet和Window环境MatConvNet安装编译cpu 版本matconvnet 通过,但gpu版本报错,如下 错误信息为 nvc ...

  10. [exceptions]如何排查can not find symbol的编译错误

    如何排查can not find symbol的编译错误 Can not find symbol意味着什么 首先,它是一个编译错误,意味着你的源代码有问题或者编译的方式有问题. 你的源代码有以下部分组 ...

最新文章

  1. Download Excel
  2. 谷歌浏览器 cococut version 视频下载插件配合倍速插件快速下载视频
  3. python -- 计算 平方、乘方、平方根_python如何求平方
  4. Hadoop经典书籍资料收藏(35本)转
  5. kafka-producer-network-thread | producer-2|||Metadata--->[Producer clientId=producer-2] Cluster ID:
  6. 微信小程序 上传身份证图像限制
  7. “世界很美好,值得你为之奋斗”我只同意后半句。
  8. matlab 二元微分方程组,求助,matlab求解二元二阶的常微分方程组
  9. jquery获取父元素下的第n个子元素
  10. 结对编程之经验教训总结
  11. APK文件使用ApkTool解包反编译和重新打包及签名
  12. 菜鸟学人工神经网络(C++11实现)零:矩阵类
  13. R语言心得说:R语言之xlsx包读写Excel数据
  14. 使用 History API 构建 JavaScript 路由器
  15. 用计算机制作flash动画教案,Flash动画制作教案
  16. 编写一个程序,模拟扔硬币的结果.
  17. MyBatis choose、when和otherwise标签简介说明
  18. 进销存系统哪个好?2023最新进销存系统推荐
  19. 安装部署启动Metricbeat,Windows
  20. 国四网络工程笔记(错题)

热门文章

  1. [指导]HP ProBook/EliteBook/Zbook系列笔记本clover安装黑苹果
  2. Django项目启动
  3. 如何批量打印Word文件
  4. TendaU12无线网卡Linux驱动,解决Centos7 安装腾达U12无线网卡驱动问题
  5. 关于触摸屏触摸驱动安装步骤
  6. Linux驱动开发|电容触摸屏
  7. java图像预处理_图像预处理(一)基本特征提取
  8. 数据库五种约束以及添加方法
  9. win10蓝牙无法连接
  10. 开关电源(DC/DC)和线性电源(LDO低压差线性稳压器)的区别