使用外部lib进行Go + Swig构建

时间:2014-08-27 08:13:58

标签: c++ go swig pkg-config

我正在尝试使用opencv函数构建cpp文件。

Go 1.3说swig building现在捆绑在go build工具中,但我没有找到一种方法来告诉构建工具添加include dirs和libs args with pkg-config。

go test -x cv_test.go                                                  
cd /Users/pierre/Projects/go-swig
clang++ -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common -g -O2 -o $WORK/_/Users/pierre/Projects/go-swig/_obj/binding.cpp.o -c ./binding.cpp
# _/Users/pierre/Projects/go-swig
In file included from ./binding.cpp:1:
./binding.h:5:10: fatal error: 'cv.h' file not found
$WORK/command-line-arguments/_test/tiler.test
FAIL    command-line-arguments [build failed]

有没有人成功做过?

2 个答案:

答案 0 :(得分:5)

截至目前,如果你使用pkg-config,Go没有正确地将包含路径传递给swig,我提交了patch但很可能在1.4出局之前不会包括。

因此,您要么使用补丁构建Go,要么使用#cgo CXXFLAGS / #cgo LDFLAGS手动指定路径,如@JamesHenstridge建议的那样。

答案 1 :(得分:4)

您可以使用以下语法在一个Go源文件中告知CGo使用特定pkg-config库的include和link标志:

// #cgo pkg-config: some-package
import "C"

也就是说,将它与cgo处理的注释块中的任何其他声明一起包含在内。只需将其包含在包中的一个.go文件中即可。您还可以指定其他编译和链接标志:

// #cgo CXXFLAGS: -std=c++11
// #cgo LDFLAGS: -L/some/library/dir -lfoo

详情请见the cgo documentation