Golang 1.12版本兼容性问题探讨

Golang 1.12版本兼容性问题探讨 我尝试使用这个 mediainfo 库的封装:

GitHub GitHub

头像

jkl1337/go-mediainfo

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

但由于 CGO 的问题,我无法在 Go 1.12 下构建。 然而,在 1.11 版本下可以正常工作… 有什么想法吗?


更多关于Golang 1.12版本兼容性问题探讨的实战教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

基于Alpine镜像的Docker环境…

更多关于Golang 1.12版本兼容性问题探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你使用的是什么操作系统?我认为你需要下载DLL包,然后将dll文件(Windows系统)或so文件(Linux系统)放置到正确的位置,同时将MediaInfoDLL文件夹源码放在C编译器包含路径中的某个位置。

即使在 Go 1.12.5 版本中我仍然遇到这个错误: github.com/jkl1337/go-mediainfo/mediainfo.go:73:22: 标识符 “_Ctype_char” 可能与 cgo 生成的标识符冲突

距离上次更新已经过去相当长的时间了。

此仓库通过命令行解析 XML 输出。虽然可能稍慢一些,但可以作为替代方案。

该项目实现了相同功能。

这个近期维护的代码库也值得关注。

是的,因为命令行速度较慢,我倾向于使用库而非命令行。我打算尝试这个包:

GitHub

zelenin/go-mediainfo

头像

Go语言对MediaInfo的绑定。通过在GitHub上创建账户来为zelenin/go-mediainfo的开发做贡献。

感谢!

我遇到了以下错误:

github.com/zelenin/go-mediainfo

在包含文件 …/github.com/zelenin/go-mediainfo/mediainfo.go:3 时: ./mediainfo.h:5:10: 致命错误:MediaInfoDLL/MediaInfoDLL.h: 没有那个文件或目录 #include <MediaInfoDLL/MediaInfoDLL.h> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 编译终止。

在Go 1.12版本中,CGO的默认行为发生了变化,特别是对C语言头文件路径的处理方式有所调整,这可能导致某些依赖CGO的库在构建时出现问题。具体来说,Go 1.12引入了更严格的CGO头文件路径验证,如果库的C代码或构建配置未完全兼容,可能会触发构建错误。

对于您提到的go-mediainfo库,它封装了MediaInfo的C库,因此高度依赖CGO。在Go 1.12下构建失败,常见原因包括:

  • C头文件路径未正确设置,导致CGO无法找到必要的头文件。
  • 环境变量(如CGO_CFLAGSCGO_LDFLAGS)在Go 1.12中需要更明确的配置。
  • 库的C代码可能使用了不兼容的语法或特性,而Go 1.12的CGO工具链更严格地执行了C标准。

以下是一个示例,展示如何在Go 1.12中手动设置CGO环境变量来尝试解决构建问题。假设您已安装MediaInfo的C库(例如通过包管理器如apt-getbrew),您可以在构建前导出相关环境变量:

// 示例:在构建前设置CGO环境变量(在终端中执行,而不是在Go代码中)
// 假设MediaInfo头文件路径为/usr/include,库文件路径为/usr/lib
export CGO_CFLAGS="-I/usr/include"
export CGO_LDFLAGS="-L/usr/lib -lmediainfo"

// 然后尝试构建您的Go项目
go build

如果上述方法无效,可能是go-mediainfo库本身需要更新以兼容Go 1.12。您可以检查库的GitHub页面是否有相关issue或补丁。例如,有时需要在Go代码中添加// #cgo指令来明确指定路径:

// 在您的Go文件中,添加以下指令(如果库未包含)
// #cgo CFLAGS: -I/usr/include
// #cgo LDFLAGS: -L/usr/lib -lmediainfo
import "C"

另外,Go 1.12对CGO的修改包括对CGO_ENABLED的默认行为调整。如果问题持续,可以尝试强制启用CGO:

export CGO_ENABLED=1
go build

如果这些步骤仍无法解决,建议在go-mediainfo的GitHub仓库中报告issue,提供详细的错误日志和系统环境信息(如操作系统、MediaInfo版本和Go版本)。根据社区经验,类似问题通常通过更新库或调整构建配置得到解决。

回到顶部