【问题标题】:Go + Swig building with external lib使用外部库构建 Go + Swig
【发布时间】:2014-08-27 08:13:57
【问题描述】:

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

Go 1.3 声明 swig 构建现在捆绑在 go build 工具中,但我没有找到方法告诉构建工具使用 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]

有人成功了吗?

【问题讨论】:

  • -I 和 . 之间有空格符是否正常?在 clang++ 行的开头?
  • 如果我使用“-I/usr/local/Cellar/opencv/2.4.9/include/opencv -I/usr/local/Cellar/opencv/2.4.9/”手动运行它就可以了包括“我不知道 -I 是什么。确实,当我删除它时它没有效果^^

标签: c++ go swig pkg-config


【解决方案1】:

截至目前,如果您使用 pkg-config,Go 不会正确地将包含路径传递给 swig,我提交了一个 patch,但它很可能在 1.4 发布之前不会被包含。

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

【讨论】:

    【解决方案2】:

    您可以告诉 CGo 使用特定 pkg-config 库的包含和链接标志,在您的一个 Go 源文件中使用以下语法:

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

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

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

    详情请见the cgo documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多