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

时间:2014-04-25 08:38:34

标签: c linux shared-libraries bluetooth-lowenergy bluez

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

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

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

我使用以下参数编译我的插件:

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

目前,您无法在Bluez 5.18(也在5.19中)中创建BLE GATT配置文件作为外部插件,并且只能使用内置插件

Bluez mailing list