2017-12-19 13 views
0

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 

は、私がここで何も悪いことをしましたか?

+0

@ user0042 '-backend'ファイルはg ++でコンパイルされていますが、' libxmr-stak-ca'ファイルもCでコンパイルされています。最初の 'nu'を実行すると、たくさんの(マングリングされた) ldは "見つけることができない"以外の詳細を提供していません... – jgillich

答えて

0

これは私のためにそれを修正:

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

は、私はちょうど、LDの間違ったを使用していたように思えます。

関連する問題