У меня проблемы с компиляцией простой программы на C ++ 11 с использованием библиотеки BlueZ:
#include <bluetooth/bluetooth.h>
int main() {}
Компилируя это с g++ -std=c++11 main.cpp
на моей коробке Fedora 21 выдает:
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
флаг.
Это нормально?
По умолчанию GCC компилируется в C ++ 03 с расширениями GNU. Если вы укажете -std=C++11
затем он компилируется в ISO C ++ 11 без включенных расширений. Однако, если вы укажете -std=gnu++11
вместо этого вы также получаете расширения GNU.
В bluetooth.h есть проблема, просто замените typeof
с __typeof__
и это будет исправлено, вот ссылка: http://git.kernel.org/cgit/bluetooth/bluez.git/commit/lib/bluetooth.h?id=cf52a40302d0d20ccca22a7a1f53e46ef8abfca8