Я пытаюсь в Linux статически связать некоторый код, созданный в Nim, с приложением Go. Я следил за документацией Nim Backend Integration и некоторыми статьями о компоновке C в Go, но не не заработало.
Вот где я нахожусь до сих пор ...
Ним код 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
Вот что я получаю:
# 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 (ветвь разработки). Любые советы или подсказки будут высоко оценены.
/my/path/to/target/libtarget.a
сам по себе не является допустимым LDFLAG. Вам также необходимо специально связать все необходимые библиотеки, т. е. вам нужно-ldl
связать с libdl дляdlclose
,dlopen
и т. д. - person JimB   schedule 11.09.2015#cgo LDFLAGS: -ldl
в файлapp.go
, но работает только в том случае, если я сохраняю недействительный#cgo LDFLAGS: /my/path/to/target/libtarget.a
. Любая идея, почему это было бы или как/где это должно быть включено, чтобы это было правильно сделано? - person Lye Fish   schedule 11.09.2015-L /path/to/target -ltarget
. Берите то, что работает ???????? - person JimB   schedule 11.09.2015-ldl
упущении, я приму его. Спасибо еще раз. - person Lye Fish   schedule 11.09.2015