c 庫鏈結問題

2021-09-26 02:15:06 字數 695 閱讀 1158

c++中問題之一:乙個工程鏈結庫裡的標頭檔案和鏈結其他標頭檔案(檔名和內容萬千一樣)不同執**況

遇到這樣的乙個情況:

castle鏈結的庫是opc.dll庫,定義ciopc(純虛類)物件ciopc* m_piopc;根據該物件可以呼叫opc.dll中的類copcprocess中的成員函式。

現象 乙個nvbt.sln(解決方案)中的ciopc類檔案在opc.dll中,而slcq.sln(解決方案)中的ciopc類檔案在opc.dll中和inc檔案下都有。當執行nvbt中的castle工程中m_piopc時會自動呼叫copcprocess中的成員函式,且呼叫copcprocess中的成員函式release()能直接進入該函式。當執行slcq中的castle工程中m_piopc時會也會自動呼叫copcprocess中的成員函式,但是呼叫copcprocess中的成員函式release()能無法進入該函式,呼叫其它函式是可以進入的。

問題分析:nvbt.sln執行正常,而slcq.sln執行不正常,兩個解決方案最大的區別在於ciopc(純虛類)類檔案所在的路徑不一樣,乙個是在opc.dll中,乙個是在inc資料夾下,前者鏈結都是ok,後者鏈結到opc.dll中就會出現不對的情況。

啟發:對比兩者之間的差異一定要全方位對比,當按照自己所看到的以及能力找不到原因時,可能問題就出現在自己沒有注意的地方,這時不用在糾結為什麼會這樣,不應該啊,正確方法是仔細對比和該物件相關每乙個事物以及他們的資料流。

C 呼叫C鏈結庫會出現的問題

以下是假設舊的c程式庫 c的標頭檔案 c.h ifndef c h define c h extern int add int x,int y endif c的原始檔 c.c int add int x,int y c 的呼叫 cpp.cpp include c.h void main 這樣編譯會產...

託管C 專案鏈結非託管C 靜態鏈結庫幾個問題

1.非託管庫中的全域性變數 在非託管庫中全域性變數只能是基本型別 int,bool,char,long等 或者指標型別,若使用其他型別的全域性變數在編譯和鏈結時都沒有任何問題,在執行時應用程式將無法啟動。2.inline方法內掉用stl型別物件成員函式 在託管庫的類成員內聯函式內直接呼叫stl的成員...

ld鏈結動態庫靜態庫問題

在使用redis寫c 的時候遇到的問題,安裝 redis 時make install 可以看到 mkdir p usr local include hiredis usr local lib cp a hiredis.h async.h read.h sds.h adapters usr local...