该篇内容由个人博客点击跳转同步更新!转载请注明出处!
都说Go语言是跨平台的语言,不管是在linux还是windows都能进行开发,但在我开发的这一阵来,深深体会到了在windows下使用Go的一些开源库导致的各种问题,以下主要说下我在使用confluent-kafka-go时遇到的问题。
我主业是搞.NET的,最近有个项目需要搞服务端,Go自然是最简单快捷的选择,需求需要将数据同步到kafka,以我.Net多年的经验confluent-kafka是我使用最多的操作库,自然而然就去GIT里找对应的Go的操作库了,经过一阵折腾准备信心满满的运行时,啪~出现各种错误:
pkg-config: exec: "pkg-config": executable file not found in %PATH%
mingw: exec: "gcc++": executable file not found in %PATH%
__debug_bin access is denied
No such file or directory #include <sys/socket.h> /* for sockaddr, .. */
xxx,exit status 3221225781
rdkafka.pc not found
我主要列了一些主要的错误出来实际可能遇到的还要多,一看什么gcc什么pkg-config这啥不是我在linux里面遇到的嘛 windows咋装,我丢 。。。。继续看git上confluent-kafka-go的介绍
1、下载cygwin64
cygwin64是一个能让你在windows下像操作linux一样的东西,安装的时候首先各种下一步,到这里选安装东西的时候要选择两样,一个是pkg-config,一个是x86_64-w64-mingw32-gcc两个都安装最新版本,选择完直接下一步到最后
pkg-config
2、设置环境变量
设置环境变量把你刚才装的cygwin64路径添加到环境变量PATH中去,比如我安装在C:\cygwin64,那就在path中添加这个路径
3、使用nuget下载kafka操作的文件
nuget是啥,.net开发的同学肯定知道。一个包管理器这个不多说,没有的同学去这个地址下载,然后输入以下命令下载包文件nuget install librdkafka.redist -Version 1.2.0 (这是我当前的最新版本)
下载完成后会在你的目录中看到这个解压 好的文件夹
4、kafka文件复制到cygwin64中去
复制 .\librdkafka.redist.1.2.0\build\native\include\ 到这个目录 c:\cygwin64\usr\include
复制 .\librdkafka.redist.1.2.0\build\native\lib\win7\x64\win7-x64-Release\v120\librdkafka.lib 到这个目录c:\cygwin64\lib\librdkafka.a (注意:这里复制过去后还要重命名成.a后缀的)
复制 \librdkafka.redist.1.2.0\runtimes\linux-x64\native\librdkafka.so 到这个目录 C:\cygwin64\lib
5、创建rdkafka.pc文件
这个文件我也不知道干嘛的,反正不加会报错,c:\cygwin64\pkgconfig直接在这个目录下添加这个文件,没有对应文件夹自己手动新建,内容为:
prefix=c:/
libdir=c:/cygwin64/lib/
includedir=c:/cygwin64/usr/include
Name: librdkafka
Description: The Apache Kafka C/C++ library
Version: 0.11.4
Cflags: -I${includedir}
Libs: -L${libdir} -lrdkafka
Libs.private: -lssl -lcrypto -lcrypto -lz -ldl -lpthread -lrt
6、复制librdkafka.dll, msvcr120.dll和zlib.dll到你对应的工作文件目录下
这是最后一步,也是最重要的一步,.\librdkafka.redist.1.2.0\runtimes\win-x64\native把这个目录下的那三个dll文件复制到你程序的目录下去简单讲就是你main.go的同级目录
以上就是该问题的解决方式,搞完这些大部分同学已经好了,但可能有部分还会提示如下错误
rdkafka.h:83:47: fatal error: sys/socket.h: No such file or directory
这个错误是缺少socket文件,也简单,自己手动加,这个目录下新建socket.h文件c:/cygwin64/usr/include/sys(没有文件夹自己新建),里面的内容去这里复制socket.h文件的内容
微信关注我哦!(转载注明出处) 关注我哦
网友评论