Re: [問題] "undefined reference to func"
※ 引述《wayne8145 (wayne)》之銘言:
: 小弟Linux kernel新手
: 一個loadable module code中的function稱為A
: 另一個linux kernel的source code稱為B
: 目前的問題是我需要讓B呼叫A
: 在B中include A 的header檔,在link time發生如題的錯誤訊息(compile time沒錯!)
: ----------------
: 因為B與memory management相關
: 故無法將B compile成loadable module
: 因此無法透過module.symvers方式讓B reference到A
: 請問有什麼方式能解決此問題呢?
: 若無法了解題意請告知,小弟能敘述更詳細,謝謝
stackfollow的解法,就類似C++的虛擬類別or java的Interface押,其主體精神就是
虛擬函式,實作面採用"函式指標"變數這個技巧來完成
在C裡面,你先定義一個"函式指標"變數,主體的code使用"函式指標"變數來呼叫函式,
這樣就不會編譯錯誤了,然後你的module 啟動的時候把你的函式記憶體位置塞到這個
"函式指標"變數裡面
危險的地方是,要是你忘記把你的函式記憶體位置塞到這個"函式指標"變數裡面,當主體
code呼叫"函式指標"變數時,系統很有可能crash,所以通常在呼叫前,要先檢查變數內容
舉一反三,如果你有很多個函式,都要進行這樣的處理,那麼然就會宣告一個結構把這些
"函式指標"變數群組起來,這就是stackfollow那篇回文的解法,這不就是C++的虛擬類別
嗎?
其實linux kernel 的裡面驅動程式介面部分幾乎都採用這個寫法,隨便找就有
延伸閱讀:
C語言的"函式指標"變數
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.228.151.2
※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1455681225.A.A51.html
推
02/17 12:57, , 1F
02/17 12:57, 1F
→
02/17 12:58, , 2F
02/17 12:58, 2F
→
02/17 12:58, , 3F
02/17 12:58, 3F
推
02/17 13:11, , 4F
02/17 13:11, 4F
→
02/17 13:12, , 5F
02/17 13:12, 5F
→
02/17 13:12, , 6F
02/17 13:12, 6F
→
02/17 13:13, , 7F
02/17 13:13, 7F
→
02/17 13:27, , 8F
02/17 13:27, 8F
→
02/17 13:28, , 9F
02/17 13:28, 9F
推
02/17 14:58, , 10F
02/17 14:58, 10F
→
02/17 14:59, , 11F
02/17 14:59, 11F
→
02/17 14:59, , 12F
02/17 14:59, 12F
推
02/17 15:28, , 13F
02/17 15:28, 13F
→
02/18 11:18, , 14F
02/18 11:18, 14F
→
02/18 11:20, , 15F
02/18 11:20, 15F
→
02/18 11:21, , 16F
02/18 11:21, 16F
→
02/18 11:21, , 17F
02/18 11:21, 17F
推
02/19 18:49, , 18F
02/19 18:49, 18F
推
02/23 01:16, , 19F
02/23 01:16, 19F
→
02/23 01:17, , 20F
02/23 01:17, 20F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章