2012-07-10 64 views
7

Tôi đang cố gắng chạy một mã cơ bản của c trong linux [ubuntu] để tìm kiếm thiết bị bluetooth, nhưng tôi đang gặp phải một số vấn đề.linux Lập trình Bluetooth trong c

Bằng cách sử dụng lệnh sudo apt-get install bluez, để cài đặt thư viện blueZ bắt buộc, có nghĩa là bluez đã là phiên bản mới nhất.

Nhưng lỗi nói rằng không thể tìm thấy bluetooth.h và các file khác trong việc biên soạn mã nguồn C, với gcc -o simplescan simplescan.c -lbluetooth

Có một gói thư viện hoàn chỉnh, hoặc tôi phải tải về các tập tin tiêu đề ?.

Tôi đang theo dõi điều này link

+0

I'am bot lập trình C++ nhưng tôi nghĩ bạn cần nguồn. Bluetooth.h là một tệp tiêu đề C++. – Stony

+7

Thử 'apt-get install libbluetooth-dev'. –

+0

apt-get không hoạt động, tôi có thể tải xuống gói này từ https://launchpad.net/ubuntu/lucid/+source/bluez/4.60-0ubuntu8 –

Trả lời

5

Có thể bạn chưa bao gồm tiêu đề cần thiết.

đây là một ví dụ về mã để quét cho các thiết bị 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; 
} 

để biên dịch nó trên linux, chỉ cần làm

gcc -o simplescan simplescan.c -lbluetooth 

EDIT:

đang gốc có thể được tìm thấy trong here

+0

Bạn đã tự viết mã đó hay bạn đã lấy mã đó từ [một nơi nào đó] (https://people.csail.mit.edu/albert/bluez-intro/c404.html) ...? – Daniel

+0

@Daniel Tôi đã nhận nó từ đâu đó, tại sao? lol – SamuelNLP

+3

Bởi vì bạn quên đề cập đến nó trong câu trả lời của bạn. – Daniel

2

Đối với tôi biết không có gói nào cho các tiêu đề này. Bạn phải tải xuống các tệp tiêu đề sau từ internet.

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

và tạo ra một thư mục gọi là "bluetooth" dưới /usr/lib/ trong máy chủ của bạn và sao chép các tiêu đề ở trên để /usr/lib/bluetooth/. Sau đó biên dịch chương trình của bạn, nó sẽ hoạt động.

Lưu ý: khi biên dịch liên kết với -lbluetooth

1

Bạn cần phải cài đặt gói linux-header. Trên Ubuntu hoặc Debian, việc này được thực hiện bằng cách thực hiện việc này:

sudo apt install linux-headers 
Các vấn đề liên quan