我不知道有很多關於在C中鏈接的信息,而且我遇到了一個問題。我的代碼是Python,但我試圖在C中使用庫(特別是libnfc)。我的Python代碼調用從IOLib.py一個功能,它看起來像這樣:使用python的c庫(未定義的參考)
from ctypes import cdll
lib = cdll.LoadLibrary('./jk4Lib.so')
def getRFID():
return lib.NFCPollWrapper()
jk4Lib.so是在同一文件夾的共享庫,從交流程序編譯
jk4RFIDPoll.c:
#include "jk4RFIDPoll.h"
static void stop_polling(int sig){
//code
}
extern int NFCPollWrapper() {
//code
}
jk4RFIDPoll.h:
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif // HAVE_CONFIG_H
#include "libnfc-1.7.0/include/nfc/nfc.h"
#include "libnfc-1.7.0/include/nfc/nfc-types.h"
#include "libnfc-1.7.0/utils/nfc-utils.h"
libnfc-1.7.0是我的程序主目錄下的一個文件夾。 這是編譯以下行:
gcc -c -Wall -fpic jk4RFIDPoll.c
gcc -shared -o libjk4.so jk4RFIDPoll.o
這一切編譯罰款,但後來當我運行的Python程序,我得到了一個未定義引用的所有函數調用jk4RFIDPoll.so。我知道函數在我包含的頭文件中,但我認爲它沒有正確地鏈接所有內容。
我猜我在編譯或其他方面做得不夠。操作系統是Debian的一個版本。我應該補充一點,我已經能夠在libnfc文件夾中運行示例程序。讓我知道是否有其他信息我應該提供。
我嘗試這樣做時添加必要的庫,它仍然給出了同樣不確定的參考。我通過使用'/ sbin/ldconfig -p'和libnfc.so來確認libnfc是我機器上的庫。我還將前兩個包括'#include'和'#include '改爲包含庫文件,而不是本地文件。 –
user2014969
再次嘗試後,它工作。不是100%確定發生了什麼變化,我想也許我必須將/ usr/local/lib添加到路徑中,然後再次編譯.so。謝謝! – user2014969