猿问

将 Nim 代码静态链接到 Go

我试图在 Linux 中将一些在 Nim 中创建的代码静态链接到 Go 应用程序中。我已经关注了Nim 后端集成文档和一些在 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(开发分支)。任何建议或提示将不胜感激。


HUX布斯
浏览 168回答 1
1回答

慕码人2483693

您缺少 libdl 库。添加-ldl到您的 LDFLAGS
随时随地看视频慕课网APP

相关分类

Go
我要回答