2016-02-12 4 views
1

Я работаю над параметром меню для подключения к Wi-Fi в моем приложении на C++, которое создается с использованием OpenFrameworks. Я хочу использовать библиотеку wpa_ctrl, но я не могу ее скомпилировать.Неопределенная ссылка на функции wpa_ctrl в моем проекте OpenFrameworks на C++. Нужна помощь в интеграции этой библиотеки c

Фрагмент кода:

NetworkWrapper.h:

#ifndef NETWORKWRAPPER_H_ 
#define NETWORKWRAPPER_H_ 

class NetworkWrapper { 
public: 
    NetworkWrapper(): 
private: 
    struct wpa_ctrl* m_ctrl; 
}; 
#endif 

NetworkWrapper.cpp:

#include "NetworkWrapper.h" 
extern "C" { 
    #include "wpa_ctrl.h" 
} 

NetworkWrapper::NetworkWrapper() { 
    m_ctrl = wpa_ctrl_open("wlan0"); 
} 

Ошибка:

***/NetworkWrapper.cpp:7: undefined reference to `wpa_ctrl_open' 
collect2: error: ld returned 1 exit status 

Я пытался бросить вокруг включают а также используя и не используя extern «C», но не имеет значения, поскольку wpa_ctrl.h также заключен в тег extern «C», хотя с #ifdef __cplusplus (который определен, я дважды проверял).

В настоящее время я почти не понимаю. Должен заметить, что я попытался включить wpa_ctrl.c в теги extern «C», которые, насколько мне известно, не должны компилироваться (?). Что также дало точно такой же результат. Это привело меня к ручной компиляции библиотеки wpa_ctrl и копированию в каталог obj, но опять же: тот же результат.

Спасибо, что нашли время, чтобы прочитать мой вопрос, надеюсь, что вы сможете помочь!

* EDIT * По просьбе моих связывающих вариантов (я подрезал его немного вниз):

г ++ -o бен/application_debug объект/linux64/Debug/SRC/main.o [.. .] obj/linux64/Debug/src/libs/wpa_ctrl.o [...] obj/linux64/Debug/src/common/NetworkWrapper.o [...] -Wl, -rpath =. /libs:./bin/libs -Wl, - по мере необходимости -Wl, -gc-sections -Wl, -rpath =./libs -liw -L ../../../ libs/fmodex/lib/linux64/-lfmodex -L ./bin/libs -lSDL -lSDL_mixer -lcurl ../../../libs/glfw/lib/linux64/libglfw3.a ../../../libs/ kiss/lib/linux64/libkiss.a. ./../../libs/rtAudio/lib/linux64/libRtAudio.a ../../../libs/tess2/lib/linux64/libtess2.a ../../../libs/ poco/lib/linux64/libPocoNet.a ../../../libs/poco/lib/linux64/libPocoXML.a ../../../libs/poco/lib/linux64/libPocoUtil.a. ./../../libs/poco/lib/linux64/libPocoFoundation.a ../../../libs/poco/lib/linux64/libPocoNetSSL.a ../../../libs/ poco/lib/linux64/libPocoNet.a ../../../libs/poco/lib/linux64/libPocoCrypto.a ../../../libs/poco/lib/linux64/libPocoUtil.a. ./../../libs/poco/lib/linux64/libPocoXML.a ../../../libs/poco/lib/linux64/libPocoFoundation.a -L/usr/lib64 -lz -lgstapp- 0.10 -lgstvideo-0.10 -lgstbase-0.10 -lgstreamer-0.10 -lgmodule-2.0 -pthread -lgthread-2.0 -pthread -lxml2 -ludev -lsndfile -lopenal -lssl -lcrypto -lpulse-simple -lpulse -lasound -lGLEW -lGLU - lGL -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig - lfreetype -lmpg123 -lglut -lX11 -lXrandr -lXxf86vm -lXi -lXcursor -ldl -lpthread -lfreeimage

+0

Покажите нам ваши варианты компоновки. Ваш компоновщик жалуется, что он не знает о функции wpa_ctrl_open() – jpou

+0

Добавил ли путь к wpa_ctrl.h к вашим путям include?Можете ли вы использовать другие символы, определенные в wpa_ctrl.h? – Anedar

+0

Я добавил свои варианты ссылок к своему сообщению. И он распознает другие символы, например, я могу определить wpa_ctrl, который отлично работает. Это просто функции, которые он не может найти. – tvd

ответ

3

Итак, я, наконец, нашел то, что я делал неправильно. Для будущих посетителей:

мне нужно добавить следующие определяет в моем Makefile:

-D CONFIG_CTRL_IFACE -D CONFIG_CTRL_IFACE_UNIX