首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >节点-ffi为C函数抛出“未定义符号”错误

节点-ffi为C函数抛出“未定义符号”错误
EN

Stack Overflow用户
提问于 2018-04-10 05:11:22
回答 1查看 739关注 0票数 1

我试图在NodeJs中使用NodeJs来使用雷迪尔

这是我的redir.js

代码语言:javascript
复制
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,因为节点-ffi总是将.so放在文件的末尾。

这是我做node redir.js时得到的

代码语言:javascript
复制
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的函数

更新:

我试图将它专门编译到一个共享库中:

代码语言:javascript
复制
gcc -shared -fpic redir.c -o libredir.so

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-11 05:00:25

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49745750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档