C ++ 11程序可以使用BlueZ吗?

时间:2015-01-13 15:20:22

标签: c++ c++11 bluetooth bluez

我在使用BlueZ库编译简单的C ++ 11程序时遇到了麻烦:

#include <bluetooth/bluetooth.h>
int main() {}

在我的Fedora 21盒子上用g++ -std=c++11 main.cpp进行编译得到:

In file included from ../scale.cpp:1:0:
/usr/include/bluetooth/bluetooth.h: In function ‘uint64_t bt_get_le64(const void*)’:
/usr/include/bluetooth/bluetooth.h:177:9: error: expected identifier before ‘*’ token
  return bt_get_unaligned((const uint64_t *) ptr);
         ^
...

这是BlueZ版本5.23和GCC 4.9.2。如果我删除-std=c++11标志,那么一切正常。

这是正常的吗?

2 个答案:

答案 0 :(得分:2)

默认情况下,GCC使用GNU扩展编译为C ++ 03。如果指定-std=C++11,则它将编译为ISO C ++ 11,但未启用扩展。但是,如果您指定-std=gnu++11,那么您还可以获得GNU扩展。

答案 1 :(得分:0)

bluetooth.h中存在问题,只需将typeof替换为__typeof__,这将得到修复,此处为引用:http://git.kernel.org/cgit/bluetooth/bluez.git/commit/lib/bluetooth.h?id=cf52a40302d0d20ccca22a7a1f53e46ef8abfca8