2015-09-10 10 views
6

Sto provando in Linux per collegare staticamente un codice creato in Nim in un'applicazione Go. Ho seguito i documenti Nim Backend Integration e alcuni articoli per il collegamento di C in Go ma non l'ho ottenuto funzionante.Collegamento statico del codice Nim a Go

Ecco dove sono a finora ...


codice Nim target.nim:

proc testnim* {.exportc.} = 
    echo "In Nim!" 

posso compilare con:

nim c --app:staticLib --noMain --header target.nim 

codice Go 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() 
} 

ho provato costruirlo entrambi questi:

go build 

go build --ldflags '-extldflags "-static"' app.go 

Ecco cosa ottengo:

 
# 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 

Così mi manca qualcosa (s). Sto usando Go 1.5 e Nim 0.11.3 (devel branch). Qualsiasi consiglio o suggerimento sarebbe molto apprezzato.

+1

'/ my/percorso/a/target/libtarget.a' su di esso non è un LDFLAG valido. Devi anche collegare in modo specifico le librerie * all * necessarie, ovvero devi '-ldl' per collegare a libdl per' dlclose', 'dlopen', ecc. – JimB

+2

e direttamente dalla pagina che hai collegato a: >" per esempio, su sistemi Linux è probabile che sia necessario utilizzare anche -ldl per collegare la funzionalità dlopen richiesta. " – JimB

+0

@ Jim: Grazie. Gran parte di questo è greco per me. Darò a quei suggerimenti una prova. –

risposta

3

Ti manca la libreria libdl. Aggiungi -ldl al tuo LDFLAGS

Problemi correlati