Может ли программа на C ++ 11 использовать BlueZ?

У меня проблемы с компиляцией простой программы на 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 флаг.

Это нормально?

1

Решение

По умолчанию GCC компилируется в C ++ 03 с расширениями GNU. Если вы укажете -std=C++11 затем он компилируется в ISO C ++ 11 без включенных расширений. Однако, если вы укажете -std=gnu++11 вместо этого вы также получаете расширения GNU.

2

Другие решения

В bluetooth.h есть проблема, просто замените typeof с __typeof__ и это будет исправлено, вот ссылка: http://git.kernel.org/cgit/bluetooth/bluez.git/commit/lib/bluetooth.h?id=cf52a40302d0d20ccca22a7a1f53e46ef8abfca8

0

По вопросам рекламы [email protected]