在 lua 插件中加载共享库的包装器时出错

Error loading wrapper for shared library in lua plugin

提问人:jerome 提问时间:8/18/2023 最后编辑:jerome 更新时间:8/18/2023 访问量:30

问:

我正在尝试为共享库编写一个 C 包装器,将其暴露给 lua,以便 lua 插件可以调用它。

我使用以下四个文件,用最少的代码重新创建了错误:

/usr/lib/x86_64-linux-gnu/wireshark/plugins/lua_test.lua:这只是一行,“require(c_wrapper)”

/usr/lib/x86_64-linux-gnu/wireshark/plugins/c_wrapper.c:它的包含中有共享库的头文件,并将shared_lib的功能(一个函数)暴露给 Lua

/home/user/Desktop/shared_lib/shared_lib.c 和 shared_lib.h:它们包含 shared_function(一个不带参数的 void 函数)

我使用以下命令将 shared_lib.c 编译为 shared_lib.so:

gcc -shared -o shared_lib.so -fPIC shared_lib.c

并使用以下命令将 c_wrapper.c 编译为 c_wrapper.so:

gcc -O2 -fPIC -I/usr/include/lua5.2 -I/usr/Desktop/shared_lib -c c_wrapper.c -o c_wrapper.o

gcc -shared -o c_wrapper.so c_wrapper.o

然后我将 c_wrapper.so 复制到 /usr/lib/x86_64-linux-gnu/lua/5.2,以便 Wireshark 可以找到它(我也尝试将 shared_lib.so 复制到此目录,但没有任何区别。

当我运行 wireshark 时,出现以下错误:

Lua: Error during loading:
error loading module 'c_wrapper' from file '/usr/lib/x86_64-linux-gnu/lua/5.2/c_wrapper.so':
    /usr/lib/x86_64-linux-gnu/lua/5.2/c_wrapper.so: undefined symbol: shared_function
stack traceback:
    [C]: in ?
    [C]: in function 'require'
    /usr/lib/x86_64-linux-gnu/wireshark/plugins/lua_test.lua:1: in main chunk

看起来包含shared_lib的标头是不够的,因为shared_function是c_wrapper尝试向 lua 公开的 shared_lib 中的函数。我不确定是否可以通过包装器执行此操作,或者我是否需要进入并修改共享库的原始代码并将其直接暴露给 lua。

在具有 Windows 主机的 Ubuntu 22.04.1 VM 上运行 Wireshark 3.6.2,gcc 版本为 11.4.0,lua 版本为 5.2。如果有更多有用的信息,请告诉我。我试图将代码包含在 c_wrapper.c 中,但无论出于何种原因,问题编辑器都遇到了问题;如果需要,我可以尝试通过编辑添加它。

任何帮助都是值得赞赏的!感谢您的阅读。

lua linker-errors wireshark wireshark-dissector

评论


答: 暂无答案