让我们说我想使用一些很棒的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
语句压制我告诉它使用的内容...
答案 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工具......我很想知道是否存在任何其他解决方案。