我构建的共享库存在问题。它基于wpa_cli并使用wpa_ctrl。 包含来自wpa_ctrl的符号,但是来自eloop - not:
g++ -Wall -g -fPIC -DPIC -fno-rtti -fno-exceptions -pthread -g -fno-exceptions -pthread -DPIC -fPIC -shared libwlan.o wpa_supplicant-2.2/src/common/wpa_ctrl.o wpa_supplicant-2.2/src/utils/eloop.o wpa_supplicant-2.2/src/utils/wpa_debug.o wpa_supplicant-2.2/src/utils/common.o wpa_supplicant-2.2/src/utils/os_unix.o wpa_supplicant-2.2/src/utils/edit_simple.o -o libwlan.so
nm wpa_supplicant-2.2/src/common/wpa_ctrl.o | grep wpa_ctrl_attach
00000578 T wpa_ctrl_attach
nm libs/libwlan/libwlan.so | grep wpa_ctrl_attach
00040340 T wpa_ctrl_attach
nm wpa_supplicant-2.2/src/utils/eloop.o | grep eloop_register_read_sock
000003bc T eloop_register_read_sock
nm libs/libwlan/libwlan.so | grep eloop_register_read_sock
000407dc T eloop_register_read_sock
U _Z24eloop_register_read_sockiPFviPvS_ES_S_
答案 0 :(得分:4)
您需要以未拼写的形式公开该功能 - 它应该看起来像eloop_register_read_sock
,而不是_Z24eloop_register_read_sockiPFviPvS_ES_S_
。
eloop.h
代码没有c ++名称demangling guard,所以在你执行的C ++代码中:
#include <eloop.h>
你需要这样做:
extern "C" {
#include <eloop.h>
}
这可以防止你以常规的错位形式结束。
wpa_supplicant库是基于C
的库,因此,如果您计划引入C++
代码,则必须在extern "C"
的点上使用C++
代码与.h.
文件中公开的例程进行交互。