Linux で、Nim で作成されたコードを Go アプリケーションに静的にリンクしようとしています。Go で C をリンクするためのNim Backend Integrationドキュメントといくつかの記事に従いましたが、機能していません。
これまでのところ、私はここにいます...
Nim コードtarget.nim
:
proc testnim* {.exportc.} =
echo "In Nim!"
私はそれをコンパイルします:
nim c --app:staticLib --noMain --header target.nim
行くコードapp.go
:
package main
/*
#cgo CFLAGS: -I/my/path/to/target/nimcache
#cgo CFLAGS: -I/my/path/to/Nim/lib
#cgo LDFLAGS: /my/path/to/target/libtarget.a
#include "/my/path/to/target/nimcache/target.h"
*/
import "C"
import "fmt"
func main() {
fmt.Println("In Go!")
C.NimMain()
C.testnim()
}
私はこれらの両方を構築しようとしました:
go build
go build --ldflags '-extldflags "-static"' app.go
ここに私が得るものがあります:
# コマンドライン引数 /my/path/to/target/libtarget.a(stdlib_system.o): 関数 `nimUnloadLibrary' 内: stdlib_system.c:(.text+0xe6f0): `dlclose' への未定義の参照 /my/path/to/target/libtarget.a(stdlib_system.o): 関数 `nimLoadLibrary' 内: stdlib_system.c:(.text+0xe71b): `dlopen' への未定義の参照 /my/path/to/target/libtarget.a(stdlib_system.o): 関数 `nimGetProcAddr' 内: stdlib_system.c:(.text+0xe750): `dlsym' への未定義の参照 collect2: エラー: ld が 1 つの終了ステータスを返しました
だから私は何かが欠けています。Go 1.5 と Nim 0.11.3 (開発ブランチ) を使用しています。アドバイスやヒントをいただければ幸いです。