Linux上的Ruby 2.3.1中的蓝牙

时间:2016-11-10 20:33:25

标签: ruby linux bluetooth

我想在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

0 个答案:

没有答案