2015-09-10 4 views
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ブランチ)を使用しています。どんなアドバイスやヒントも大歓迎です。

+1

'/ my/path/to/target/libtarget.a'はそれ自身では有効なLDFLAGではありません。 'dlclose'や' dlopen'などのlibdlにリンクするには '-ldl'が必要です。 – JimB

+2

そしてあなたがリンクしたページから直接: " "例えば、すべての必要なライブラリをリンクする必要があります。 Linuxシステムでは、必要なdlopen機能をリンクするために-ldlも使用する必要があります。 – JimB

+0

@JimB:ありがとう。これの多くは私にとってギリシャ語です。私はそれらの提案を試してみましょう。 –

答えて

3

あなたにはlibdlライブラリがありません。あなたのLDFLAGSに-ldlを追加してください

関連する問題