繁体   English   中英

Node-ffi为C函数引发“未定义符号”错误

[英]Node-ffi throws 'undefined symbol' error for C functions

我正在尝试使用node-ffi在NodeJ中使用redir

这是我的redir.js

const ref = require('ref');
const ffi = require('ffi');
const Struct = require('ref-struct');

const struct_in_addr = Struct({
  's_addr': 'unsigned long',
});

const struct_sockaddr_in = Struct({
  'sin_family': 'short',
  'sin_port'  : 'u_short',
  'in_addr'   : struct_in_addr,
  'sin_zero'  : 'char',
});

var redir = ffi.Library('./redir', {
  'target_init'   : [ 'int', [ 'char *', 'int', [ struct_sockaddr_in, "pointer" ]] ],
  'target_connect': [ 'int', [ 'int', [ struct_sockaddr_in, "pointer" ] ] ],
  'client_accept' : [ 'int', [ 'int', [ struct_sockaddr_in, "pointer" ] ] ],
  'server_socket' : [ 'int', [ 'char *', 'int', 'int' ] ],
});

我通过执行./autogen.sh && ./configure && ./make进行编译,并生成redir可执行文件。 我必须将其重命名为redir.so因为node-ffi会将.so放在文件末尾

这是我执行node redir.js时得到的:

Error: Dynamic Symbol Retrieval Error: ./redir.so: undefined symbol: target_init
    at DynamicLibrary.get (/home/lz/redir-controller/node_modules/ffi/lib/dynamic_library.js:112:11)

它无法找到target_init函数。 我相信我一切都很好。 可能是函数签名错误(我使用了错误的类型),还是实际上没有名称为target_init函数?

更新:

我试图将其专门编译为共享库:

gcc -shared -fpic redir.c -o libredir.so

但是找不到target_init的问题仍然存在

解决方案:从函数中删除static关键字:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM