linux - 如何在项目中使用 CMake 包含 bluez 最新版本库

标签 linux bluetooth cmake bluez

我想将 bluez 最新版本 (5.44) 包含到我的 C 程序项目中。我正在使用 CMake 进行构建。我尝试使用 pkg_check_modules 如下

pkg_check_modules (BLUEZ REQUIRED bluez)
include_directories(${BLUEZ_INCLUDE_DIRS})
link_directories(${BLUEZ_LIBRARY_DIRS})

但它总是找到旧版本 5.37。我怎样才能指出这是最新版本?

我也已经尝试过了,但是它抛出了如下错误。

pkg_check_modules (BLUEZ REQUIRED bluez=5.44)
include_directories(${BLUEZ_INCLUDE_DIRS})
link_directories(${BLUEZ_LIBRARY_DIRS})

获取错误:

Checking for module 'bluez=5.44'
--   
CMake Error at /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:367 (message):
  A required package was not found
Call Stack (most recent call first):
  /usr/share/cmake-3.5/Modules/FindPkgConfig.cmake:532 (_pkg_check_modules_internal)
  CMakeLists.txt:30 (pkg_check_modules)

我下载了最新的 bluez 版本并使用 sudo make install 构建和安装。我能够找到并使用 bluetoothctl 工具。

最佳答案

首先,您需要确保pkg-config 可以找到您安装的bluez 版本。如果做不到,那么 CMake 也做不到。

$ pkg-config --modversion bluez

如果这没有为您提供您期望的版本,那么您需要找到您想要的版本的 bluez.pc,并确保其目录位于 PKG_CONFIG_PATH 的开头。由于您声明您使用了 sudo make install,因此您想要的 bluez.pc 很可能位于 /usr/local/lib/pkgconfig/bluez.pc。 (你需要自己看才能确定。)如果是这样的话,那么

$ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH} pkg-config --modversion bluez

应该返回您要查找的版本。如果是这样,请采取必要措施使该更改对您的 shell 永久生效。删除您的 CMake 缓存,然后重新创建您的项目。

关于linux - 如何在项目中使用 CMake 包含 bluez 最新版本库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43181692/

相关文章:

linux - 在 shell 脚本中反转命令行参数

linux - 如何使用 Awk 显示列中的文件名?

Android BLE Beacon 扫描

android - 调用callback()到Java时应用崩溃。由于detatchThread而导致运行时错误

c++ - 使用 Boost 的 Visual Studio C++/OpenCL 项目未在 Linux 上使用 g++ 进行编译

linux - 如何将 Redis master 同步到另一个独立的 Redis 实例?

android - 在 Android 4.3 蓝牙 BLE 上重置蓝牙芯片后调用 BluetoothGatt.connect() 时捕获 DeadObjectException

java - 489次成功连接后android蓝牙连接失败

linux - 交叉编译隧道

c++ - 由于 undefined reference ,无法链接到 Debian 上的 Crypto++