2012-07-10 129 views
7

我想在linux [ubuntu]中運行c的基本代碼來搜索藍牙設備,但我面臨一些問題。linux在藍牙編程c

通過使用命令sudo apt-get install bluez,要安裝所需的blueZ庫,它表示bluez已經是最新版本。

但錯誤出現的是無法找到bluetooth.h和編譯C源代碼的其他文件,以gcc -o simplescan simplescan.c -lbluetooth

是否有一個完整的庫包,或者我要下載這些頭文件?

我下面這個link

+0

我是一個C++程序員,但我認爲你需要源代碼。 Bluetooth.h是一個C++頭文件。 – Stony 2012-07-10 07:44:18

+7

試試'apt-get install libbluetooth-dev'。 – 2012-07-10 08:04:48

+0

apt-get無法正常工作,我可以從https://launchpad.net/ubuntu/lucid/+source/bluez/4.60-0ubuntu8下載此軟件包 – 2012-07-11 08:53:01

回答

5

也許你並沒有包括必要的頭。

這裏有代碼的例子來掃描藍牙設備

#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; 
} 

編譯它在Linux,只是做

gcc -o simplescan simplescan.c -lbluetooth 

編輯:

原始代碼可以在here

被發現
+0

你自己寫了那個代碼,還是你從[某處]得到它(https://people.csail.mit.edu/albert/bluez-intro/c404.html)...? – Daniel 2017-06-19 18:11:15

+0

@Daniel我從什麼地方得到它,爲什麼?大聲笑 – SamuelNLP 2017-06-20 08:29:20

+3

因爲你忘了在你的回答中提到它。 – Daniel 2017-06-20 10:06:37

2

至於我知道那裏沒有這些頭的包。你必須從網上下載以下頭文件。

  1. bluetooth.h
  2. hci.h
  3. hci_lib.h

和你的主機上創建一個名爲 「bluetooth/usr/lib/目錄下,並在上方的頭複製到/usr/lib/bluetooth/。然後編譯你的程序,它應該工作。

注:在編譯與-lbluetooth

1

鏈接,您需要安裝Linux的頭文件包。在Ubuntu或Debian上,這是通過這樣做的:

sudo apt install linux-headers