【问题标题】:How do I link a C++ library with CGO and Swig?如何将 C++ 库与 CGO 和 Swig 链接?
【发布时间】:2018-06-02 10:45:49
【问题描述】:

我想在我的 Go 程序中使用 C++ 程序 xmr-stak。经过一番研究,我选择了SWIG 来生成绑定。问题是 ld 找不到库文件。我会一步一步写下我做了什么。

我在src/miner/xmrstak/xmrstak.swigcxx 创建了这个文件以及xmr-stak 的源代码:

 %module xmrstak
 %{
#include "xmrstak/net/jpsock.hpp"
#include "xmrstak/jconf.hpp"
#include "xmrstak/misc/executor.hpp"
 %}


%include "xmrstak/misc/executor.hpp"

由于 Go 支持 Swig,它会在构建时自动生成绑定。但是 Go 仍然需要一个包名,所以我刚刚创建了package.go

package xmrstak

现在,我可以构建这个项目,这会导致很多错误,例如:

/tmp/go-build176223381/gitlab.com/jgillich/autominer/miner/xmrstak/_obj/xmrstak_wrap.cxx.o: In function `executor::inst()':
./xmrstak/misc/executor.hpp:35: undefined reference to `executor::executor()'

要解决这个问题,看来我需要告诉 ld 链接库。我已将以下内容添加到我的package.go

// #cgo LDFLAGS: -L${SRCDIR}/xmrstak/ -l${SRCDIR}/libxmr-stak-backend.a
import "C"

并将libxmr-stak-backend.a 复制到同一文件夹中。该文件是通过使用cmake . && make 构建 xmr-stak 获得的,应该包含我需要的所有内容(目前)。

我的问题是这实际上不起作用。我得到以下输出:

$ go install
# gitlab.com/jgillich/autominer/miner/xmrstak
xmrstak/misc/executor.hpp:43: Warning 507: No Go typemap defined for ex_event &&
[further warnings ommitted]
# gitlab.com/jgillich/autominer/miner/xmrstak
/usr/bin/ld: cannot find -l/home/jgillich/go/src/gitlab.com/jgillich/autominer/miner/xmrstak/libxmr-stak-backend.a
collect2: error: ld returned 1 exit status

但是该文件确实存在:

$ ls
libxmr-stak-backend.a  package.go  xmrstak  xmrstak.swigcxx

$ file /home/jgillich/go/src/gitlab.com/jgillich/autominer/miner/xmrstak/libxmr-stak-backend.a
/home/jgillich/go/src/gitlab.com/jgillich/autominer/miner/xmrstak/libxmr-stak-backend.a: current ar archive

我在这里做错了吗?

【问题讨论】:

  • @user0042 两者都是,-backend 文件是用 g++ 编译的,但还有一个 libxmr-stak-c.a 文件编译为 C。在第一个运行 nu 会显示很多(损坏的)符号,有点很烂 ld 除了“找不到”之外没有提供更多细节......

标签: c++ go swig cgo


【解决方案1】:

这为我解决了问题:

// #cgo LDFLAGS: -L${SRCDIR} -lxmr-stak-backend
import "C"

好像我只是用错了ld。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    相关资源
    最近更新 更多