6

我正在尝试在 Linux 中将在 Nim 中创建的一些代码静态链接到 Go 应用程序中。我已经关注了Nim Backend Integration文档和一些在 Go 中链接 C 的文章,但没有得到它的工作。

这就是我目前所处的位置......


尼姆代码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

这是我得到的:

# 命令行参数
/my/path/to/target/libtarget.a(stdlib_system.o):在函数“nimUnloadLibrary”中:
stdlib_system.c:(.text+0xe6f0): 对 `dlclose' 的未定义引用
/my/path/to/target/libtarget.a(stdlib_system.o):在函数“nimLoadLibrary”中:
stdlib_system.c:(.text+0xe71b): 未定义对“dlopen”的引用
/my/path/to/target/libtarget.a(stdlib_system.o):在函数“nimGetProcAddr”中:
stdlib_system.c:(.text+0xe750): 未定义对“dlsym”的引用
collect2:错误:ld 返回 1 个退出状态

所以我错过了一些东西。我正在使用 Go 1.5 和 Nim 0.11.3(开发分支)。任何建议或提示将不胜感激。

4

1 回答 1

3

您缺少 libdl 库。添加-ldl到您的 LDFLAGS

于 2015-09-10T22:44:12.663 回答