多平台 C BLE 依赖问题

Multiplatform C BLE dependency issue

我正在使用 bluez 在 C 中构建一个应用程序。

我使用 CLion 作为我的开发环境,有两个目标 - raspberry Pi 4B 和我的 Linux 机器。

这是我的CMakeLists.txt

cmake_minimum_required(VERSION 3.13)
project(bluetooth_client C)

set(CMAKE_C_STANDARD 11)

set (CMAKE_C_FLAGS "-lbluetooth")
add_executable(bluetooth_client main.c)

当我 运行 以 raspberry pi(又名远程主机)为目标时,它工作正常。当我 运行 它以本地主机为目标时(Linux 在英特尔上)它显示此构建消息:

我试图验证我是否安装了准确的库。当我针对 Linux 开发人员编辑代码时,它可以正确地看到所有蓝牙库 (bluetooth/hci/hci_lib)。

我的代码运行来自Edison-Playground

set (CMAKE_C_FLAGS "-lbluetooth") 将库放在可执行文件之前,这会导致无效顺序并且链接器找不到您的符号。

根本不要直接使用 CMAKE_C_FLAGS,忘记它的存在 - 使用各种 add_* 工具,例如 add_compile_optionsadd_link_options。使用 target_link_libraries(bluetooth_client PRIVATE bluetooth) 进行链接。