对于具有纯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
那我该怎么做呢?
1条答案
按热度按时间fgw7neuy1#
这与围棋没有太大关系-看来你在这方面做的一切都是正确的。问题是你使用的图书馆需要
sys/socket.h
这在windows上根本不存在(请参阅在windows上使用sys/socket.h函数)。你的选择与另一个答案中提到的类似:
尝试使用cygwin构建。
修改库以使用winsock而不是
sys/socket.h
.找一个不同的库,一个支持windows的库(你正在使用的库的作者明确表示不支持windows)。