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

标签 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

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 和 using 而不是 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, --as-needed -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

最佳答案

所以我终于找到了我做错了什么。对于 future 的访客:

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

-D CONFIG_CTRL_IFACE -D CONFIG_CTRL_IFACE_UNIX

关于c++ - 在我的 C++ OpenFrameworks 项目中未定义对 wpa_ctrl 函数的引用。需要帮助集成这个 c 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35366267/

相关文章:

c - 如何在 Visual Studio 2012 中使用枚举

python - 在 Python 中打印 C 字符串

java - 在 Windows 7 上模拟套接字连接重置/超时

c++ - 我如何声明指向共享公共(public)接口(interface)的不同类的指针?

c++ - 使用 python 正则表达式从 C++ 源中提取命名空间

c - 系统调用 read 和 write 的行为如何以及为什么线程无法工作?

c - 进程终止时是否保证发送 RST 数据包?

python - 从 udp 接收符号,为什么?

c++ vs MATLAB 速度优化。例如。我的 matlab 代码运行速度比 C++ 快?

c++ - 使用 OpenMP 并行运行的最简单示例