覆盖外部包的cgo编译器和链接器标志?

时间:2015-02-25 02:52:29

标签: go cgo

让我们说我想使用一些很棒的go包。我可以通过以下方式加入:

import "github.com/really-awesome/project/foobar"

在该项目的foobar.go文件中,它定义了一些cgo指令,如:

#cgo windows CFLAGS: -I C:/some-path/Include
#cgo windows LDFLAGS: -L C:/some-path/Lib -lfoobar

但如果我在其他地方安装了foobar C依赖项,我真的需要这些行说:

#cgo windows CFLAGS: -I C:/different-path/Include
#cgo windows LDFLAGS: -L C:/different-path/Lib -lfoobar

有没有办法覆盖或特朗普cgo正在寻找这些依赖关系?现在我的修复是在运行go get ./...之后手动编辑这两行,这将获取github.comreally-awesome/project/foobar代码。

注意:我使用MinGw编译器,但我怀疑这很重要。

更新

我试过添加标志来构建无济于事:

go build -x -gcflags="-I C:/different/include -L C:/different-path/lib -lfoobar"
go build -x -ccflags="-I C:/different/include" -ldflags="-L C:/different-path/lib -lfoobar"

使用-x参数,我看到了标志的打印输出,并且它们不包含我在命令行上设置的标志。也许外部go包顶部的#cgo CFLAGS/LDFLAGS语句压制我告诉它使用的内容...

2 个答案:

答案 0 :(得分:3)

您可以通过设置SELECT * FROM F WHERE F_T_ID = (SELECT F_T_ID FROM F INNER JOIN T ON F_T_ID = T_ID WHERE F_ID = x) CGO_CPPFLAGS环境变量来执行此操作。

例如,在我的MacBook上,Homebrew安装在CGO_LDFLAGS(而不是~/.homebrew)中,因此当我尝试使用本机绑定的/usr/local包时,它们无法找到标题和libs。

要解决此问题,我将这两行添加到go get文件中:

~/.zshenv

答案 1 :(得分:1)

这是{{1}}填补的角色。如果库是以这种方式编写的,它将从foobar的pkgconfig定义中选择正确的路径。

我意识到它不是问题的直接答案,并且pkgconfig并不完全是原生的Windows工具......我很想知道是否存在任何其他解决方案。