GoプログラムでC++プログラムxmr-stakを使いたいです。いくつかの調査の後、私はSWIGにバインディングを生成するために解決しました。問題は、ldがライブラリファイルを見つけることができないことです。私はちょうど私がしたことを一歩下に書き留めます。C++ライブラリをCGOとSwigにリンクするにはどうすればよいですか?
私はXMR-stakのソースコードとともにsrc/miner/xmrstak/xmrstak.swigcxx
でこのファイルを作成:
%module xmrstak
%{
#include "xmrstak/net/jpsock.hpp"
#include "xmrstak/jconf.hpp"
#include "xmrstak/misc/executor.hpp"
%}
%include "xmrstak/misc/executor.hpp"
をガブガブ飲むが移動によってサポートされているので、それが自動的にビルド時にバインディングを生成します。しかし、Goは、まだパッケージ名が必要ですので、私はちょうどpackage.go
を作成しました:これを修正するには
/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()'
、:今すぐ
package xmrstak
、私のようなエラーが多く、その結果、このプロジェクトをビルドすることができますライブラリをリンクするようldに伝える必要があるようです。
// #cgo LDFLAGS: -L${SRCDIR}/xmrstak/ -l${SRCDIR}/libxmr-stak-backend.a
import "C"
を同じフォルダにlibxmr-stak-backend.a
をコピーした:私は私のpackage.go
に以下を追加しました。このファイルは、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-ca'ファイルもCでコンパイルされています。最初の 'nu'を実行すると、たくさんの(マングリングされた) ldは "見つけることができない"以外の詳細を提供していません... – jgillich