在Windows平台下构建Linux平台的Golang包

在Windows平台下构建Linux平台的Golang包 我想为Linux平台构建这个包:

GitHub GitHub

头像

jkl1337/go-mediainfo

Go语言封装的mediainfo库。通过在GitHub上创建账户来为jkl1337/go-mediainfo开发做贡献。

我在Windows 10系统下工作。 当我设置GOOS=WINDOWS时构建成功,但设置GOOS=linux时出现以下错误:

构建约束排除了C:\Work\GoWorkspace\src\github.com\jkl1337\go-mediainfo中的所有Go文件

如果我设置CGO_ENABLED=1,会出现这个错误:

_cgo_export.c:1:0: error: -fPIC ignored for target

有什么建议吗? 致礼


更多关于在Windows平台下构建Linux平台的Golang包的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

只是好奇,您为什么不考虑直接在Linux上进行开发呢?

更多关于在Windows平台下构建Linux平台的Golang包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Windows平台上为Linux目标交叉编译包含CGO的Go包时,需要配置正确的环境变量和工具链。以下是具体步骤和示例:

首先,确保安装了支持Linux目标的GCC交叉编译工具链。推荐使用MinGW-w64或MSYS2中的工具。例如,通过MSYS2安装:

pacman -S mingw-w64-x86_64-gcc

然后,设置环境变量并构建。由于该包依赖C库,必须启用CGO并指定正确的工具链。在Windows命令提示符或PowerShell中执行:

# 设置目标平台为Linux 64位
set GOOS=linux
set GOARCH=amd64
set CGO_ENABLED=1

# 指定交叉编译使用的GCC工具链路径(根据实际安装位置调整)
set CC=x86_64-w64-mingw32-gcc  # 如果使用MinGW-w64,路径可能不同

# 构建包
go build -o mediainfo-linux github.com/jkl1337/go-mediainfo

如果错误持续,检查C库依赖。该包可能依赖MediaInfo的C库。在Linux上,需安装如libmediainfo-dev;在Windows交叉编译时,需提供Linux版本的库。但交叉编译C库可能复杂,建议在Linux容器或虚拟机中构建。

替代方案:使用Docker在Windows上创建Linux构建环境。创建Dockerfile:

FROM golang:1.21

RUN apt-get update && apt-get install -y libmediainfo-dev

WORKDIR /app
COPY . .
RUN go build -o mediainfo github.com/jkl1337/go-mediainfo

然后在Windows上运行:

docker build -t mediainfo-builder .
docker run --rm -v ${PWD}:/output mediainfo-builder cp /app/mediainfo /output/

如果问题仍存在,检查包的构建约束。错误“构建约束排除所有Go文件”可能因文件头部的构建标签导致。例如,如果文件包含// +build windows,则需在Linux目标中移除或调整。查看包源码文件,确保无平台限制。

示例调整:若文件mediainfo.go有:

// +build windows

改为:

// +build windows linux

或删除该行以允许所有平台。

总结:交叉编译CGO包需工具链和库支持。在Windows上为Linux构建,优先使用Docker简化环境依赖。

回到顶部