我在使用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
标志,那么一切正常。
这是正常的吗?
答案 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