【发布时间】:2014-04-25 08:38:33
【问题描述】:
我正在用 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
【问题讨论】:
标签: c linux shared-libraries bluetooth-lowenergy bluez