我正在尝试在Linux中将在Nim中创建的一些代码静态链接到Go应用程序中。我已经按照Nim Backend Integration文档和一些文章将Go中的C链接起来但没有得到它的工作。
这是我到目前为止的地方......
Nim code 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(开发分支)。任何建议或提示都将非常感激。
答案 0 :(得分:3)
你错过了libdl库。将-ldl
添加到您的LDFLAGS