关于librdkafka编译错误问题解决
在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编译错误问题解决相关推荐
- KEIL-MDK编译错误问题解决办法
KEIL-MDK编译错误问题解决办法 Error: L6218E: Undefined symbol NVIC_PriorityGroupConfig (referred from main.o). ...
- 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 ...
- 龙芯平台stream编译错误问题解决
执行命令: gcc -O2 stream.c 报错如下: Dump relocate record: stack top relocation name symbol at /tmp/ccn99HNZ ...
- 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 ...
- u盘版linux initramfs,Linux_内核升级后 出现initramfs错误问题解决, 出现initramfs找不到/root /hos - phpStudy...
内核升级后 出现initramfs错误问题解决 出现initramfs找不到/root /host或437或 VFS之类的提示: 1.如果root.disk是在fat32 分区上,所以内核选项要把fa ...
- (随时增加)linux编译错误集锦
1.Error: Invalid function arguments provided. 错误原因:传递参数过程有错误 解决办法: a.走读代码,或者gdb调试,加打印,分析打印出现前后文的代码接口 ...
- Java “constant string too long” 编译错误
这个问题是编译时错误,在 Java 的运行时没有这个限制. 当我们在 Java 编译器中输入的变量值超过 64 KB 的话,Java 编译器是不会让编译通过的,你将会得到一个 constant str ...
- oracle 查看 编译错误,Oracle-已编译但有错误,命令行提交包不显示结果
开发环境名称 版本 操作系统 Windows 10 X64 Oracle win64_11gR2_database PLSQL Developer 11.0.4.1788(64 bit)01.1793 ...
- matconvnet 编译错误 : nvcc fatal '-DNEDBUG': expected a number
matconvnet 编译错误 按方法Win10安装MatConvnet和Window环境MatConvNet安装编译cpu 版本matconvnet 通过,但gpu版本报错,如下 错误信息为 nvc ...
- [exceptions]如何排查can not find symbol的编译错误
如何排查can not find symbol的编译错误 Can not find symbol意味着什么 首先,它是一个编译错误,意味着你的源代码有问题或者编译的方式有问题. 你的源代码有以下部分组 ...
最新文章
- Download Excel
- 谷歌浏览器 cococut version 视频下载插件配合倍速插件快速下载视频
- python -- 计算 平方、乘方、平方根_python如何求平方
- Hadoop经典书籍资料收藏(35本)转
- kafka-producer-network-thread | producer-2|||Metadata--->[Producer clientId=producer-2] Cluster ID:
- 微信小程序 上传身份证图像限制
- “世界很美好,值得你为之奋斗”我只同意后半句。
- matlab 二元微分方程组,求助,matlab求解二元二阶的常微分方程组
- jquery获取父元素下的第n个子元素
- 结对编程之经验教训总结
- APK文件使用ApkTool解包反编译和重新打包及签名
- 菜鸟学人工神经网络(C++11实现)零:矩阵类
- R语言心得说:R语言之xlsx包读写Excel数据
- 使用 History API 构建 JavaScript 路由器
- 用计算机制作flash动画教案,Flash动画制作教案
- 编写一个程序,模拟扔硬币的结果.
- MyBatis choose、when和otherwise标签简介说明
- 进销存系统哪个好?2023最新进销存系统推荐
- 安装部署启动Metricbeat,Windows
- 国四网络工程笔记(错题)