2015-09-10 18 views
6

Tôi đang thử trong Linux để liên kết tĩnh một số mã được tạo trong Nim thành một ứng dụng Go. Tôi đã theo dõi các tài liệu Nim Backend Integration và một số bài viết để liên kết C trong Go nhưng chưa nhận được nó hoạt động.Liên kết tĩnh mã Nim với Go

Đây là nơi tôi đang ở rất xa ...


đang Nim target.nim:

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

tôi biên dịch nó với:

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

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

Tôi đã cố gắng xây dựng nó cả hai:

go build 

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

Đây là những gì tôi nhận được:

 
# 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 

Vì vậy, tôi đang thiếu một cái gì đó (s). Tôi đang sử dụng Go 1.5 và Nim 0.11.3 (devel branch). Bất kỳ lời khuyên hay gợi ý nào sẽ được đánh giá cao.

+1

'/ my/path/to/target/libtarget.a' của riêng mình trên số tiền đó không phải là LDFLAG hợp lệ. Bạn cũng cần liên kết cụ thể tất cả * thư viện cần thiết, tức là bạn cần '-ldl' để liên kết đến libdl cho' dlclose', 'dlopen', v.v. – JimB

+2

và trực tiếp từ trang bạn đã liên kết đến: >" chẳng hạn, trên các hệ thống Linux, bạn có thể sẽ cần phải sử dụng -ldl quá để liên kết trong chức năng dlopen cần thiết. " – JimB

+0

@JimB: Cảm ơn bạn. Vì vậy, phần lớn trong số này là tiếng Hy Lạp đối với tôi. Tôi sẽ thử những gợi ý đó. –

Trả lời

3

Bạn đang thiếu thư viện libdl. Thêm -ldl vào LDFLAGS

Các vấn đề liên quan