6
私は、Nimで作成したコードをGoアプリケーションに静的にリンクしようとしています。私はNim Backend Integrationのドキュメントと、GoでCをリンクするためのいくつかの記事をたどってきましたが、うまく動作しませんでした。Nimコードを静的にGoにリンクする
ここで私はこれまで...
ニムコードtarget.nim
でよどこだ:
nim c --app:staticLib --noMain --header target.nim
ゴーコード:
proc testnim* {.exportc.} =
echo "In 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
ここで私が得るものです:
# command-line-arguments /my/path/to/target/libtarget.a(stdlib_system.o): In function `nimUnloadLibrary': stdlib_system.c:(.text+0xe6f0): undefined reference to `dlclose' /my/path/to/target/libtarget.a(stdlib_system.o): In function `nimLoadLibrary': stdlib_system.c:(.text+0xe71b): undefined reference to `dlopen' /my/path/to/target/libtarget.a(stdlib_system.o): In function `nimGetProcAddr': stdlib_system.c:(.text+0xe750): undefined reference to `dlsym' collect2: error: ld returned 1 exit status
だから私は何か(複数可)が欠落しています。私はGo 1.5とNim 0.11.3(develブランチ)を使用しています。どんなアドバイスやヒントも大歓迎です。
'/ my/path/to/target/libtarget.a'はそれ自身では有効なLDFLAGではありません。 'dlclose'や' dlopen'などのlibdlにリンクするには '-ldl'が必要です。 – JimB
そしてあなたがリンクしたページから直接: " "例えば、すべての必要なライブラリをリンクする必要があります。 Linuxシステムでは、必要なdlopen機能をリンクするために-ldlも使用する必要があります。 – JimB
@JimB:ありがとう。これの多くは私にとってギリシャ語です。私はそれらの提案を試してみましょう。 –