gpt4 book ai didi

javascript - Node-ffi 为 C 函数抛出 'undefined symbol' 错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:17:55 26 4
gpt4 key购买 nike

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

这是我的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 关键字:)

关于javascript - Node-ffi 为 C 函数抛出 'undefined symbol' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49745750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com