Программирование Bluetooth для Linux на C и socket.h

Я новый пользователь stackoverflow! Я пишу, потому что у меня есть некоторые проблемы с программированием Bluetooth с помощью C на моей KUbuntu 12.04.

Я пытаюсь подключить устройство (LEGO Mindstorm Brick) к своему ноутбуку с помощью программы, которую я нашел в этом pdf-файле (Начать подключение): NXT_Bluetooth_Handout

Я установил следующие пакеты: - bluez-hcidump, средство отладки связи - bluez, стек Bluetooth для Linux и связанные инструменты - libBluetooth3, библиотека BlueZ - libBluetooth-dev, файлы разработки для связи с библиотекой BlueZ

// Socket, used for Bluetooth socket
#include <sys/socket.h>
#include <sys/types.h>
// Bluetooth headers
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>

В основном я столкнулся с двумя проблемами: 1) Если я просто пытаюсь скомпилировать программу, я получаю:

$ gcc -lm -lbluetooth nxt_bt_connect.c -o nxt_bt_connect
/tmp/ccSLdkpn.o: In function `init_bluetooth':
nxt_bt_connect.c:(.text+0x60): undefined reference to `str2ba'
collect2: ld returned 1 exit status

Где str2ba — это функция BlueZ, которая должна работать… ba2str — это другая функция, предоставляемая этой библиотекой, и она работает без проблем.

2) Если я изменю код, чтобы использовать функцию ba2str вместо функции str2ba, я получу ошибку, связанную с сокетом:

$ gcc -lm -lbluetooth 1.c -o nxt_bt_connect2
1.c: In function ‘main’:
1.c:101:23: error: called object ‘socket’ is not a function

Проблема в том, что у меня нет заголовка сокета sys/, на самом деле, если я запускаю:

find /usr/include/ -name socket.h
 /usr/include/gtkmm-2.4/gtkmm/socket.h
 /usr/include/linux/socket.h
 /usr/include/asm-generic/socket.h
 /usr/include/giomm-2.4/giomm/socket.h
 /usr/include/x86_64-linux-gnu/sys/socket.h
 /usr/include/x86_64-linux-gnu/asm/socket.h
 /usr/include/x86_64-linux-gnu/bits/socket.h

Есть ли кто-нибудь, кто знает, как решить эти проблемы? Я надеюсь, что описал всю ситуацию достаточно ясно... Прошу прощения за мой плохой английский!

Большое спасибо!!


person mafalda    schedule 09.06.2012    source источник


Ответы (2)


По второму вопросу: вы должны опубликовать код, который вы написали. Иначе мы не можем понять, что плохо.

По первому вопросу: вам нужно поставить флаги компоновщика библиотеки в качестве последних параметров при вызове GCC:

gcc nxt_bt_connect.c -o nxt_bt_connect -lm -lbluetooth
person Community    schedule 09.06.2012
comment
Хорошо, я очень невежественен, большое спасибо!! В другом файле были ошибки программирования, которые я просто исправил :-) - person mafalda; 12.06.2012
comment
Привет, извините, что беспокою вас снова, другой вопрос: если я хочу сделать файл cmake той же программы, как я могу включить -lm и -lbluetooth? - person mafalda; 18.06.2012
comment
Хорошо -- впишите это в файл? - person ; 18.06.2012

Предполагая, что KUbuntu использует пакет Debian, <sys/socket.h> также известный как /usr/include/sys/socket.h поставляется с пакетом libc6-dev.

person alk    schedule 10.06.2012