2014-09-04 80 views
1

我有一個共享庫的問題,我構建。它基於wpa_cli並使用wpa_ctrl。從wpa_ctrl 符號都包括在內,但是從ELOOP - 不是:所以未定義的符號(在鏈接對象中定義)

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_ 

回答

4

你需要公開的功能未重整形式 - 它應該看起來像eloop_register_read_sock,而不是_Z24eloop_register_read_sockiPFviPvS_ES_S_

eloop.h代碼沒有C++的名字demangling後衛,所以在你的C++代碼中執行:

#include <eloop.h> 

你需要做的:

extern "C" { 
#include <eloop.h> 
} 

這應該防止您結束了與例程的破壞形式。

wpa_supplicant提供庫是基於C庫,所以如果你在介紹C++碼規劃,你將不得不對點使用extern "C"其中C++代碼在.h.文件暴露的程序進行交互。

+0

賓果!非常感謝你 :) – 2014-09-04 15:44:33