2014-08-27 75 views
2

我正在尝试使用opencv函数构建cpp文件。Go + Swig building with external lib

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

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] 

有没有人成功了?

+0

-I和 - 之间是否有空格字符是正常的。在clang ++行的开头? – 2014-08-27 09:03:07

+0

如果我用“-I/usr/local/Cellar/opencv/2.4.9/include/opencv -I/usr/local/Cellar/opencv/2.4.9/include”手动运行它,它会起作用 我不'不知道什么 - 我。没有,当我删除它时没有任何影响^^ – 2014-08-27 10:05:47

回答

4

你可以告诉CGO使用包括和使用特定pkg配置库链接标志下面的语法在围棋源文件之一:

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

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

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

详情可the cgo documentation

+0

我可以确认这适用于go 1.7 – DH1TW 2017-01-31 00:19:20

5

发现截至目前,Go不正确传递包含路径,如果你使用的pkg-config来痛饮,我提交了一个patch,但它最有可能不会包含在1.4出来之前。

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