這種問題通常很簡單, 就是你的程式呼叫了 library 中沒有的函式.
但是如果你的 library.h 中, 真的有這個函式, 卻還是發生這種狀況.
那就很詭異了.
然而, 如果你在 C++ 的環境中, 呼叫 C 所建立的 library 或 dll.
這種詭異的現象就會發生.
明明給了 library, 就是無法 link!
發生這種問題的主要原因在於, C++ 與 C 對 function name 的內部表示不一樣.
因為 C++ 為了提供 function overload 的功能, 所以會在原來的 function name 後面
加入一些記號 (mangle),
這使得 C++ 要呼叫 C 的 library function, 會發生問題.
解決方法
只要在 .h 檔中, 外面包上一層
#ifdef __cplusplus
extern "C" {
#endif
原來的 C .h 內容
#ifdef __cplusplus
}
#endif
這樣就可以讓 C++ 呼叫這些 fucntion 時, 不要加 mangle.
進而解決這個問題, 當然了這些 function 自然不支援 overload 的功能.
by Jing
你好!
回覆刪除我是台灣的學生:)
今天下午被這個問題"卡"了4個多小時 Orz...
感謝這篇文章解救了我^_^
Thanks!!
回覆刪除提醒一下跟我遇到相同問題的人
回覆刪除如果你的IDE是Keil uVision
請確認你所extern的function所在的.c檔
是不是已經add to project
不然你檢查程式一個禮拜也檢查不出原因的