编译windows下具有c依赖关系的go程序

mkh04yzy  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(521)

对于具有纯go依赖项的纯go项目,构建go工作得很好。但在构建具有c依赖项的项目时,它在windows上失败:

go build -a -o bin/xyz.exe ./xyz/main.go
go: downloading gopkg.in/confluentinc/confluent-kafka-go.v1 v1.4.2
go: downloading github.com/confluentinc/confluent-kafka-go v1.4.2

# gopkg.in/confluentinc/confluent-kafka-go.v1/kafka

In file included from C:\Users\VssAdministrator\go\pkg\mod\gopkg.in\confluentinc\confluent-kafka-go.v1@v1.4.2\kafka\00version.go:24:
./librdkafka/rdkafka.h:83:10: fatal error: sys/socket.h: No such file or directory
 #include <sys/socket.h> /* for sockaddr, .. */
          ^~~~~~~~~~~~~~
compilation terminated.
mingw32-make:***[Makefile:10: build-windows] Error 2

## [error]Cmd.exe exited with code '2'.

Finishing: CmdLine

从上面的输出可以看出,我使用的是makefile,我的azure-pipelines.yml如下所示:

...
- script: 'make package-windows'
...

这是我的makefile:

build-windows:
    go build -a -o bin/xyz.exe ./xyz/main.go

我也试过设置goos和goarch,但都没有用:

build-windows:
    GOOS=windows GOARCH=amd64 go build -a -o bin/xyz.exe ./xyz/main.go

那我该怎么做呢?

fgw7neuy

fgw7neuy1#

这与围棋没有太大关系-看来你在这方面做的一切都是正确的。问题是你使用的图书馆需要 sys/socket.h 这在windows上根本不存在(请参阅在windows上使用sys/socket.h函数)。
你的选择与另一个答案中提到的类似:
尝试使用cygwin构建。
修改库以使用winsock而不是 sys/socket.h .
找一个不同的库,一个支持windows的库(你正在使用的库的作者明确表示不支持windows)。

相关问题