Неопределенная ссылка на функции wpa_ctrl в моем проекте C++ OpenFrameworks. Нужна помощь в интеграции этой библиотеки C

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

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

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

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

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

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

* РЕДАКТИРОВАТЬ * В соответствии с запросом мои варианты ссылок (я его немного урезал):

g ++ -o bin / application_debug obj / 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-section -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 -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 -lfypepe lmpg123 -lglut -lX11 -lXrandr -lXxf86vm -lXi -lXcursor -ldl -lpthread -lfreeimage

1 ответ

Решение

Поэтому я наконец-то обнаружил, что я делаю не так. Для будущих посетителей:

Мне нужно было добавить следующие определения в мой make-файл:

-D CONFIG_CTRL_IFACE -D CONFIG_CTRL_IFACE_UNIX
Другие вопросы по тегам