Golangには便利なライブラリがたくさんありますが、私はC++アプリケーションをサポートする必要があり、Golangに書き直すことはできません(大きすぎます)。golangの.aライブラリをC++プロジェクトから静的にリンクする方法は?
私は静的リンクによって私のC++アプリケーションからGoのライブラリ($GOPATH\pkg\path\to\package\*.a
ファイル)を使用しようとしています。
私は、単純なライブラリー(Golang)作るまず:
package math_core
func Sum(a, b int) int {
return a + b
}
そして建てこのコード(このプロジェクトのルートフォルダにある)次のコマンドを経由して:
SET GOOS=windows
SET GOARCH=386
go build
go install
を(結果として私はlibmath.core.a
ライブラリを持っています)
それを作った後このライブラリを使用しますication(C++):
#include <iostream>
extern int Sum(int a, int b);
int main() {
std::cout << Sum(5, 7) << std::endl;
return 0;
}
私はこの記事をウェブでが見つかりました:
しかしそれは私を助けません。 C/C++開発者(Neon.3リリース4.6.3)
- のWindows 10のx64
- のEclipse IDE:SOFTWARE以下、私が使用し
)(rubenvb-4.8-stdthread)
- ゴーグラント島1.0 EAP(#1 GO-173.3415.23)
- JRE 1.8.0_152リリース-1024-B6 AMD64 を構築
- Go 1.9。2つのウィンドウ/ AMD64
Z:\\MyProjects\\Math.Console\\
フォルダの内容:
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\\main.cpp"
g++ "-LZ:\\MyProjects\\Math.Console" -o Math.Console.exe main.o -lmath.core
しかし、私:私がしようとして
は、静的に、以下のコマンドを使用して、私のmath.console
アプリケーションからlibmath.core.a
ライブラリをリンクしますこのOUTPUTを得た:
`Z:\MyProjects\Math.Console/libmath.core.a: could not read symbols: Archive has no index; run ranlib to add one
はまた、私は
ar -xo libmath.core.a
経由ライブラリlibmath.core.a
からobject files (*.o)
を抽出しようとした私は、次のファイルだ:私が得た私はnm
を経由してそれに内容を確認しようとすると
__.PKGDEF
_go_.o
main.o
をこの:
nm: __.PKGDEF: File format not recognized
nm: _go_.o: File format not recognized
そしてlibmath.core.a
ライブラリからmain.o
ファイルのため、私はこれを得た:
00000000 b .bss
00000000 d .ctors
00000000 d .data
00000000 N .debug_abbrev
00000000 N .debug_aranges
00000000 N .debug_info
00000000 N .debug_line
00000000 N .debug_macro
00000000 N .debug_str
00000000 r .eh_frame
00000000 r .rdata$zzz
00000000 t .text
U ___main
00000058 t ___tcf_0
00000097 t __GLOBAL__sub_I_main
U __Z3Sumii
0000006a t __Z41__static_initialization_and_destruction_0ii
U __ZNSolsEi
U __ZNSolsEPFRSoS_E
U __ZNSt8ios_base4InitC1Ev
U __ZNSt8ios_base4InitD1Ev
U __ZSt4cout
U __ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_
00000000 b __ZStL8__ioinit
U _atexit
00000000 T _main
しかし、私は、私はC++プロジェクトからGolangのライブラリを使用する方法を理解していません。
ありがとうございました。
は "また、私はオブジェクトファイル(* .o)は、ライブラリlibmath.core.aからを抽出しようとした私が得た... main.oを" 'main.o'ファイルがCから生成された++ソース。それは、ライブラリのアーカイブにあるであろう唯一の方法は、あなた自身そこに入れていましたさ。互換性のある名前の符号化 - – davmac
はまた、私は非常にGoはC++を使用していることを疑います。一般的にはそれがいずれかのC++にはできませんので、(https://stackoverflow.com/questions/1713214/how-to-use-c-in-go)[直接Cから行くを呼び出すことが不可能]そうです。 – davmac