У меня есть библиотека C clib.c
с этой функцией
int hi(char* hello) { return 900; }
, скомпилированная как:
gcc clib.c -o clib.so --shared -fPIC
Я использую это в библиотеке Nim под названием 'nlib.nim`:
proc hi*(hello: cstring): cint {.cdecl, importc: "hi", dynlib: "./clib.so".}
proc hi2*(hello: cstring): cint {.cdecl, exportc.} = return hi(hello)
выполняется как:
nim c --app:lib --noMain -o:nlib.so nlib.nim
Если я вызываю функцию hi2 непосредственно в Nim, она возвращает 900, совершенно точно.Но если я позвоню из NodeJS через FFI:
var ffi = require('ffi');
var lib = ffi.Library('./nlib.so', { 'hi2' : [ "int", ["string"] ] });
console.log(lib.hi2("hey"));
, я получу Segmentation fault (core dumped)
.