6

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 (開発ブランチ) を使用しています。アドバイスやヒントをいただければ幸いです。

4

1 に答える 1

3

libdl ライブラリがありません。-ldlLDFLAGSに追加

于 2015-09-10T22:44:12.663 に答える