gpt4 book ai didi

c - 共享库插件和从主程序调用函数 (Bluez)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:36 28 4
gpt4 key购买 nike

我正在用 C 为 Bluez 5.18 编写插件代码,我想创建自己的 BLE GATT 配置文件作为插件(共享库)。我需要从主代码调用函数,当我编译它时,没有错误,但是在加载插件时,它因 undefined symbol 而崩溃 - 对函数的不满意引用(例如 gatt_service_add)。但是有些函数可以从主程序访问 - 所有函数都带有前缀“btd_”。

当我使用 nm 程序列出主程序中的符号时,前缀为“btd_”的函数是全局符号(列表中的 T 标记),“gatt_service_add”函数是局部符号(列表中的 t 标记)

所以我的问题是,如何在我的插件中使用像“gatt_service_add”这样的函数而不出现 undefined symbol 错误?我在编译时是否缺少一些参数?请注意,我无法更改主程序,因此我只需要针对我的插件的解决方案。仅使用带有“btd_”前缀的函数我不知道如何创建工作自己的 gatt 配置文件等...因此可接受的解决方案也可以仅使用可访问的函数(“btd_”前缀 + 来自/lib 的一些帮助函数)

我用这个参数编译我的插件:

gcc -DHAVE_CONFIG_H -I/usr/include/glib-2.0 -I/usr/include/dbus-1.0 -I/usr/include/bluetooth -I/usr/lib/dbus-1.0/include -I/usr/lib/glib-2.0/include -I"/home/<user>/Workspace/bluez" -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"gatt-example.d" -MT"gatt-example.d" -o "gatt-example.o" "../gatt-example.c"
gcc -Wl,-E -shared -o "bluez-plugin.so" ./gatt-example.o /home/<user>/Workspace/bluez/lib/.libs/libbluetooth-internal.a -ldbus-1 -lglib-2.0

最佳答案

局部符号不能被其他模块访问。这就是本地符号的定义。您没有遗漏任何编译器标志,这是不可能的。

关于c - 共享库插件和从主程序调用函数 (Bluez),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23288176/

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