我想在Linux上使用Ruby 2.3.1与Arduino蓝牙模块进行通信。我已经尝试了sudo gem install bluetooth
,但这没有用,因为Makefile的执行失败了。谁能在这里建议一个好的图书馆?
修改
这是makefile的错误日志。对不起,这件事用德语。
current directory: /usr/lib/ruby/gems/2.3.0/gems/bluetooth-
1.0/ext/bluetooth4-lin
/usr/bin/ruby -r ./siteconf20161111-21025-1p4skf9.rb extconf.rb
checking for main() in -lbluetooth... yes
creating Makefile
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/usr/lib/ruby/gems/2.3.0/extensions/x86_64-linux/2.3.0/bluetooth-1.0/mkmf.log
current directory: /usr/lib/ruby/gems/2.3.0/gems/bluetooth-1.0/ext/bluetooth
make "DESTDIR=" clean
current directory: /usr/lib/ruby/gems/2.3.0/gems/bluetooth-1.0/ext/bluetooth
make "DESTDIR="
compiling linux/ruby_bluetooth.c
In file included from linux/ruby_bluetooth.c:3:0:
/usr/include/ruby-2.3.0/ruby/backward/rubyio.h:2:2: Warnung: #warning use "ruby/io.h" instead of "rubyio.h" [-Wcpp]
#warning use "ruby/io.h" instead of "rubyio.h"
^~~~~~~
In file included from linux/ruby_bluetooth.c:4:0:
/usr/include/ruby-2.3.0/ruby/backward/rubysig.h:14:2: Warnung: #warning rubysig.h is obsolete [-Wcpp]
#warning rubysig.h is obsolete
^~~~~~~
In file included from linux/ruby_bluetooth.c:5:0:
/usr/include/ruby-2.3.0/ruby/backward/util.h:2:2: Warnung: #warning use "ruby/util.h" instead of bare "util.h" [-Wcpp]
#warning use "ruby/util.h" instead of bare "util.h"
^~~~~~~
linux/ruby_bluetooth.c: In Funktion »Init_bluetooth«:
linux/ruby_bluetooth.c:58:40: Fehler: »mBluetooth« nicht deklariert (erste Benutzung in dieser Funktion)
bt_cBluetoothDevice = rb_const_get(mBluetooth, rb_intern("Device"));
^~~~~~~~~~
linux/ruby_bluetooth.c:58:40: Anmerkung: jeder nicht deklarierte Bezeichner wird nur einmal für jede Funktion, in der er vorkommt, gemeldet
linux/ruby_bluetooth.c: In Funktion »bt_socket_accept«:
linux/ruby_bluetooth.c:62:5: Fehler: unbekannter Typname: »OpenFile«
OpenFile *fptr;
^~~~~~~~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:120:53: Warnung: Zuweisung von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:70:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:120:48: Warnung: Übergabe des Arguments 1 von »rb_io_check_closed« von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:70:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:149:6: Anmerkung: »rb_io_t * {aka struct rb_io_t *}« erwartet, aber Argument hat Typ »int *«
void rb_io_check_closed(rb_io_t*);
^~~~~~~~~~~~~~~~~~
linux/ruby_bluetooth.c:72:50: Fehler: Anfrage nach Element »f« in etwas, was keine Struktur oder Variante ist
sock2 = s_accept(bt_socket_class, fileno(fptr->f), (struct sockaddr *)buf, &len);
^~
linux/ruby_bluetooth.c: In Funktion »bt_socket_listen«:
linux/ruby_bluetooth.c:81:5: Fehler: unbekannter Typname: »OpenFile«
OpenFile *fptr;
^~~~~~~~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:120:53: Warnung: Zuweisung von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:86:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(sock, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:120:48: Warnung: Übergabe des Arguments 1 von »rb_io_check_closed« von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:86:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(sock, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:149:6: Anmerkung: »rb_io_t * {aka struct rb_io_t *}« erwartet, aber Argument hat Typ »int *«
void rb_io_check_closed(rb_io_t*);
^~~~~~~~~~~~~~~~~~
linux/ruby_bluetooth.c:87:27: Fehler: Anfrage nach Element »f« in etwas, was keine Struktur oder Variante ist
if (listen(fileno(fptr->f), backlog) < 0)
^~
linux/ruby_bluetooth.c: In Funktion »bt_service_register«:
linux/ruby_bluetooth.c:103:36: Warnung: Implizite Deklaration der Funktion »STR2CSTR« [-Wimplicit-function-declaration]
const char *service_name = STR2CSTR(rb_iv_get(self, "@name"));
^~~~~~~~
linux/ruby_bluetooth.c:103:36: Warnung: Initialisierung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung [-Wint-conversion]
linux/ruby_bluetooth.c:104:35: Warnung: Initialisierung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung [-Wint-conversion]
const char *service_dsc = STR2CSTR(rb_iv_get(self, "@description"));
^~~~~~~~
linux/ruby_bluetooth.c:105:36: Warnung: Initialisierung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung [-Wint-conversion]
const char *service_prov = STR2CSTR(rb_iv_get(self, "@provider"));
^~~~~~~~
linux/ruby_bluetooth.c:119:28: Warnung: Initialisierung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung [-Wint-conversion]
char *service_id = STR2CSTR(rb_iv_get(self, "@uuid"));
^~~~~~~~
linux/ruby_bluetooth.c: In Funktion »bt_l2cap_socket_connect«:
linux/ruby_bluetooth.c:222:5: Fehler: unbekannter Typname: »OpenFile«
OpenFile *fptr;
^~~~~~~~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:120:53: Warnung: Zuweisung von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:225:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:120:48: Warnung: Übergabe des Arguments 1 von »rb_io_check_closed« von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:225:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:149:6: Anmerkung: »rb_io_t * {aka struct rb_io_t *}« erwartet, aber Argument hat Typ »int *«
void rb_io_check_closed(rb_io_t*);
^~~~~~~~~~~~~~~~~~
linux/ruby_bluetooth.c:226:21: Fehler: Anfrage nach Element »f« in etwas, was keine Struktur oder Variante ist
fd = fileno(fptr->f);
^~
linux/ruby_bluetooth.c:229:18: Warnung: Initialisierung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung [-Wint-conversion]
char *dest = STR2CSTR(host);
^~~~~~~~
linux/ruby_bluetooth.c: In Funktion »bt_rfcomm_socket_connect«:
linux/ruby_bluetooth.c:247:5: Fehler: unbekannter Typname: »OpenFile«
OpenFile *fptr;
^~~~~~~~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:120:53: Warnung: Zuweisung von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:250:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:120:48: Warnung: Übergabe des Arguments 1 von »rb_io_check_closed« von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:250:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:149:6: Anmerkung: »rb_io_t * {aka struct rb_io_t *}« erwartet, aber Argument hat Typ »int *«
void rb_io_check_closed(rb_io_t*);
^~~~~~~~~~~~~~~~~~
linux/ruby_bluetooth.c:251:21: Fehler: Anfrage nach Element »f« in etwas, was keine Struktur oder Variante ist
fd = fileno(fptr->f);
^~
linux/ruby_bluetooth.c:254:18: Warnung: Initialisierung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung [-Wint-conversion]
char *dest = STR2CSTR(host);
^~~~~~~~
linux/ruby_bluetooth.c: In Funktion »bt_socket_s_for_fd«:
linux/ruby_bluetooth.c:272:5: Fehler: unbekannter Typname: »OpenFile«
OpenFile *fptr;
^~~~~~~~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:120:53: Warnung: Zuweisung von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:275:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(sock, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:120:48: Warnung: Übergabe des Arguments 1 von »rb_io_check_closed« von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:275:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(sock, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:149:6: Anmerkung: »rb_io_t * {aka struct rb_io_t *}« erwartet, aber Argument hat Typ »int *«
void rb_io_check_closed(rb_io_t*);
^~~~~~~~~~~~~~~~~~
linux/ruby_bluetooth.c: In Funktion »bt_rfcomm_socket_bind«:
linux/ruby_bluetooth.c:282:5: Fehler: unbekannter Typname: »OpenFile«
OpenFile *fptr;
^~~~~~~~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:120:53: Warnung: Zuweisung von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:285:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:120:48: Warnung: Übergabe des Arguments 1 von »rb_io_check_closed« von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:285:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:149:6: Anmerkung: »rb_io_t * {aka struct rb_io_t *}« erwartet, aber Argument hat Typ »int *«
void rb_io_check_closed(rb_io_t*);
^~~~~~~~~~~~~~~~~~
linux/ruby_bluetooth.c:286:21: Fehler: Anfrage nach Element »f« in etwas, was keine Struktur oder Variante ist
fd = fileno(fptr->f);
^~
linux/ruby_bluetooth.c: In Funktion »bt_l2cap_socket_bind«:
linux/ruby_bluetooth.c:301:5: Fehler: unbekannter Typname: »OpenFile«
OpenFile *fptr;
^~~~~~~~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:120:53: Warnung: Zuweisung von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:304:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:120:48: Warnung: Übergabe des Arguments 1 von »rb_io_check_closed« von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
#define GetOpenFile(obj,fp) rb_io_check_closed((fp) = RFILE(rb_io_taint_check(obj))->fptr)
^
linux/ruby_bluetooth.c:304:5: Anmerkung: bei Substitution des Makros »GetOpenFile«
GetOpenFile(self, fptr);
^~~~~~~~~~~
/usr/include/ruby-2.3.0/ruby/io.h:149:6: Anmerkung: »rb_io_t * {aka struct rb_io_t *}« erwartet, aber Argument hat Typ »int *«
void rb_io_check_closed(rb_io_t*);
^~~~~~~~~~~~~~~~~~
linux/ruby_bluetooth.c:305:21: Fehler: Anfrage nach Element »f« in etwas, was keine Struktur oder Variante ist
fd = fileno(fptr->f);
^~
linux/ruby_bluetooth.c: In Funktion »bt_init_sock«:
linux/ruby_bluetooth.c:340:5: Fehler: unbekannter Typname: »OpenFile«
OpenFile *fp = NULL;
^~~~~~~~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:127:10: Warnung: Zuweisung von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
(fp) = rb_io_make_open_file(obj);\
^
linux/ruby_bluetooth.c:342:5: Anmerkung: bei Substitution des Makros »MakeOpenFile«
MakeOpenFile(sock, fp);
^~~~~~~~~~~~
linux/ruby_bluetooth.c:344:7: Fehler: Anfrage nach Element »f« in etwas, was keine Struktur oder Variante ist
fp->f = rb_fdopen(fd, "r");
^~
linux/ruby_bluetooth.c:345:7: Fehler: Anfrage nach Element »f2« in etwas, was keine Struktur oder Variante ist
fp->f2 = rb_fdopen(fd, "w");
^~
linux/ruby_bluetooth.c:346:7: Fehler: Anfrage nach Element »mode« in etwas, was keine Struktur oder Variante ist
fp->mode = FMODE_READWRITE;
^~
linux/ruby_bluetooth.c:348:24: Warnung: Übergabe des Arguments 1 von »rb_io_synchronized« von inkompatiblem Zeigertyp [-Wincompatible-pointer-types]
rb_io_synchronized(fp);
^~
In file included from /usr/include/ruby-2.3.0/ruby/backward/rubyio.h:6:0,
from linux/ruby_bluetooth.c:3:
/usr/include/ruby-2.3.0/ruby/io.h:147:6: Anmerkung: »rb_io_t * {aka struct rb_io_t *}« erwartet, aber Argument hat Typ »int *«
void rb_io_synchronized(rb_io_t*);
^~~~~~~~~~~~~~~~~~
linux/ruby_bluetooth.c: In Funktion »bt_devices_scan«:
linux/ruby_bluetooth.c:414:32: Fehler: Makro »rb_str_new« erfordert 2 Argumente, aber nur 1 wurden angegeben
rb_str_new(name), rb_str_new2(addr));
^
linux/ruby_bluetooth.c: In Funktion »s_accept«:
linux/ruby_bluetooth.c:435:5: Fehler: »TRAP_BEG« nicht deklariert (erste Benutzung in dieser Funktion)
TRAP_BEG;
^~~~~~~~
linux/ruby_bluetooth.c:437:5: Fehler: »TRAP_END« nicht deklariert (erste Benutzung in dieser Funktion)
TRAP_END;
^~~~~~~~
make: *** [Makefile:239: ruby_bluetooth.o] Fehler 1
make failed, exit code 2