2012-07-10 25 views
7

linux [ubuntu]でcの基本コードを実行して、Bluetoothデバイスを検索しようとしていますが、問題が発生しています。linux BluetoothプログラミングのC

コマンドsudo apt-get install bluezを使用して、必要なblueZライブラリをインストールすると、bluezはすでに最新のバージョンであるといえます。

しかし、エラーがgcc -o simplescan simplescan.c -lbluetooth

で、Cのソースコードをコンパイルしてbluetooth.hや他のファイルを見つけることができませんが、完全なライブラリパッケージがあり、または私はこれらのヘッダファイルをダウンロードする必要がないことに来ます?。

私はこのlink

+0

私はあなたのソースコードが必要だと思います。 Bluetooth.hはC++ヘッダーファイルです。 – Stony

+7

'apt-get install libbluetooth-dev'を試してください。 –

+0

apt-getが動作しない、https://launchpad.net/ubuntu/lucid/+source/bluez/4.60-0ubuntu8からこのパッケージをダウンロードできますか? –

答えて

5

を次たぶんあなたは不可欠なヘッダーが含まれていなかったのです。

オリジナルコードがhere

で見つけることができます:ここ

はちょうど

gcc -o simplescan simplescan.c -lbluetooth 

を行うEDIT、Linux上でそれをコンパイルするBluetoothデバイスのため

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/socket.h> 
#include <bluetooth/bluetooth.h> 
#include <bluetooth/hci.h> 
#include <bluetooth/hci_lib.h> 

int main(int argc, char **argv) 
{ 
    inquiry_info *ii = NULL; 
    int max_rsp, num_rsp; 
    int dev_id, sock, len, flags; 
    int i; 
    char addr[19] = { 0 }; 
    char name[248] = { 0 }; 

    dev_id = hci_get_route(NULL); 
    sock = hci_open_dev(dev_id); 
    if (dev_id < 0 || sock < 0) { 
     perror("opening socket"); 
     exit(1); 
    } 

    len = 8; 
    max_rsp = 255; 
    flags = IREQ_CACHE_FLUSH; 
    ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info)); 

    num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags); 
    if(num_rsp < 0) perror("hci_inquiry"); 

    for (i = 0; i < num_rsp; i++) { 
     ba2str(&(ii+i)->bdaddr, addr); 
     memset(name, 0, sizeof(name)); 
     if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name), 
      name, 0) < 0) 
     strcpy(name, "[unknown]"); 
     printf("%s %s\n", addr, name); 
    } 

    free(ii); 
    close(sock); 
    return 0; 
} 

をスキャンするコードの例です

+0

あなた自身でコードを書いたのですか、[どこか](https://people.csail.mit.edu/albert/bluez-intro/c404.html)から手に入れましたか? – Daniel

+0

@ダニエル私はどこかからそれを手に入れました、なぜですか?笑 – SamuelNLP

+3

あなたはあなたの答えに言及するのを忘れてしまったからです。 – Daniel

2

私はこれらのヘッダー用のパッケージはありません。インターネットから以下のヘッダファイルをダウンロードする必要があります。

  • hci_lib.h
  • hci.h
  • bluetooth.h
    1. ホストマシンに /usr/lib/下の " bluetooth" というディレクトリを作成し、 /usr/lib/bluetooth/に上記のヘッダをコピーします。その後、あなたのプログラムをコンパイルして、それはうまくいくはずです。

      注:-lbluetooth

    1

    でリンクをコンパイルしているときは、Linux-ヘッダのパッケージをインストールする必要があります。 UbuntuやDebianの場合、これは次のようにして行います:

    sudo apt install linux-headers 
    
    関連する問題