我正在尝试使用 Go 构建一个示例共享对象库。代码编译(使用命令go build -o libsample.so -buildmode=c-shared .),成功构建了一个共享对象库 - 但是在通过 JNA(来自 Java)或 ctypes(来自 python)访问导出的方法时,我感到恐慌。我用 Go 写的代码是:
// package name: libsample.so
package main
import "C"
import "fmt"
//export Hello
func Hello(s string) {
fmt.Println("Hello " + s + "!")
}
func main() {
}
Hello从 Java访问此方法时:
import com.sun.jna.*;
public class sample {
public interface GoSO extends Library {
GoSO INSTANCE = (GoSO) Native.loadLibrary("sample" ,GoSO.class);
void Hello(String s);
}
public static void main(String[] args) {
GoSO.INSTANCE.Hello("World");
}
}
或来自 Python:
#!/usr/bin/python
import ctypes
lib = ctypes.CDLL("./libsample.so")
lib.Hello("World")
我收到以下错误:
runtime: out of memory: cannot allocate 140042998120448-byte block (1048576 in use)
fatal error: out of memory
runtime stack:
runtime.throw(0x7f5e434bfe50, 0xd)
/usr/local/go/src/runtime/panic.go:530 +0x92
runtime.largeAlloc(0x7f5e4d27dc8d, 0xc800000003, 0xc82003cf08)
/usr/local/go/src/runtime/malloc.go:768 +0xdf
runtime.mallocgc.func3()
/usr/local/go/src/runtime/malloc.go:664 +0x35
runtime.systemstack(0x7f5e4e4d3ab8)
/usr/local/go/src/runtime/asm_amd64.s:291 +0x72
runtime.mstart()
/usr/local/go/src/runtime/proc.go:1048
goroutine 17 [running, locked to thread]:
runtime.systemstack_switch()
/usr/local/go/src/runtime/asm_amd64.s:245 fp=0xc82003cb50 sp=0xc82003cb48
runtime.mallocgc(0x7f5e4d27dc8d, 0x0, 0x3, 0x0)
/usr/local/go/src/runtime/malloc.go:665 +0x9fe fp=0xc82003cc28 sp=0xc82003cb50
runtime.rawstring(0x7f5e4d27dc8d, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/local/go/src/runtime/string.go:284 +0x72 fp=0xc82003cc70 sp=0xc82003cc28
runtime.rawstringtmp(0x0, 0x7f5e4d27dc8d, 0x0, 0x0, 0x0, 0x0, 0x0)
出了什么问题?如果我使用 anint或 afloat作为参数创建方法,则不会发生此错误。
天涯尽头无女友
相关分类