2014-04-25 5 views
1

C에서 Bluez 5.18 용 플러그인을 코딩 중이며, 내 자신의 BLE GATT 프로파일을 플러그인 (공유 라이브러리)으로 생성하고 싶습니다. 주 코드에서 함수 호출이 필요합니다. 오류가 발생하지 않지만 플러그인을로드하는 동안 정의되지 않은 심볼에 대한 충돌이 발생합니다 (예 : gatt_service_add). 그러나 일부 기능은 주 프로그램에서 액세스 할 수 있습니다. 모든 기능 앞에는 접두사 "btd_"가 붙습니다. I는 "btd_"나노 프로그램 프리픽스 함수를 이용하여, 메인 프로그램의 기호 "gatt_service_add"글로벌 심볼 (리스트 T 마크) 및 함수 지정되는 목록메인 프로그램 (Bluez)에서 공유 라이브러리 플러그인 및 호출 기능

로컬 심볼 (목록 t 마크) 따라서

인 내 질문에, 어떻게 정의 된 기호 오류없이 내 플러그인 "gatt_service_add"같은 기능을 사용할 수 있습니까? 컴파일하는 동안 매개 변수가 누락 되었습니까? 주 프로그램을 변경할 수 없으므로 내 플러그인에만 해결책이 필요합니다. "btd_"접두어가있는 함수 만 사용하면 gatt 프로파일 등을 만드는 방법을 알지 못합니다. 허용 가능한 솔루션은 액세스 가능한 함수 ("btd_"접두사 +/lib의 도움말 기능)에서만 gatt 프로필을 사용할 수도 있습니다.

나는이 매개 변수를 사용하여 내 플러그인을 컴파일해야 :

gcc -DHAVE_CONFIG_H -I/usr/include/glib-2.0 -I/usr/include/dbus-1.0 -I/usr/include/bluetooth -I/usr/lib/dbus-1.0/include -I/usr/lib/glib-2.0/include -I"/home/<user>/Workspace/bluez" -O3 -Wall -c -fmessage-length=0 -fPIC -MMD -MP -MF"gatt-example.d" -MT"gatt-example.d" -o "gatt-example.o" "../gatt-example.c" 
gcc -Wl,-E -shared -o "bluez-plugin.so" ./gatt-example.o /home/<user>/Workspace/bluez/lib/.libs/libbluetooth-internal.a -ldbus-1 -lglib-2.0 

답변

0

은 지금, 당신은 (또한 5.19에서) Bluez 5.18 외부 플러그인 같은 BLE GATT 프로파일을 생성하지 못할, 그리고 내장 플러그인에게 답변을

Bluez mailing list

0

지역 심볼은 다른 모듈에 액세스 할 수 없습니다. 이것이 바로 지역 상징의 정의입니다. 컴파일러 플래그가 누락되었습니다. 단지 가능하지 않습니다.

+0

감사를 사용하는 경우에만 가능하다. 그리고 GATT 프로파일을 만드는 방법은 어떻게 할 수 있는지 알고 있습니까? – Yanny

+0

Bluez 5.18 소스 코드를 살펴본 결과 gatt-exmaple.c도 있습니다. 어떻게 이것이 플러그인으로 작동해야하는지 날 때린다. 나는 버전 3.x에서 플러그인에 의해 필요없는 심볼을 안 export 한 로그 엔트리를 발견했다. 아마도 그 변화로 인해 그 모범이 무너질 것입니다. gatt_service_add 대신 공개 API 함수를 많이 사용해야합니다. 그러나 어느 것이 명백한지는 아닙니다. 가장 좋은 방법은 Bluez 개발자 메일 링리스트의 관리자/게시자에게 연락하는 것입니다. – Matthias