在我的C ++ OpenFrameworks项目中对wpa_ctrl函数的未定义引用。需要帮助集成此C库

tvd*_*tvd 1 c c++ network-programming openframeworks

我正在使用菜单选项来连接到使用OpenFrameworks构建的C ++应用程序中的wifi。我想使用wpa_ctrl库,但无法编译。

程式码片段:

NetworkWrapper.h:

#ifndef NETWORKWRAPPER_H_
#define NETWORKWRAPPER_H_

class NetworkWrapper {
public:
     NetworkWrapper():
private:
     struct wpa_ctrl* m_ctrl;
};
#endif
Run Code Online (Sandbox Code Playgroud)

NetworkWrapper.cpp:

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

NetworkWrapper::NetworkWrapper() {
     m_ctrl = wpa_ctrl_open("wlan0");
}
Run Code Online (Sandbox Code Playgroud)

错误:

***/NetworkWrapper.cpp:7: undefined reference to `wpa_ctrl_open'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我试过抛出include并使用和不使用extern“ C”,但是看到wpa_ctrl.h也包含在extern“ C”标签中没有什么区别,尽管使用#ifdef __cplusplus(已定义,我将选中)。

我现在几乎没有主意了。我应该注意,我尝试将wpa_ctrl.c包含在外部的“ 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-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

tvd*_*tvd 5

所以我终于发现我做错了。对于未来的访客:

我需要在我的makefile中添加以下定义:

-D CONFIG_CTRL_IFACE -D CONFIG_CTRL_IFACE_UNIX
Run Code Online (Sandbox Code Playgroud)