2011-01-31 44 views
4

假設我將庫分配爲二進制文件。它有兩個版本,調試和發佈。調試和發佈互不兼容,所以如果例如用戶構建一個發佈可執行文件,他/她必須鏈接到發佈庫。確保相同的配置用於庫和可執行文件

如果庫和可執行版本之間存在不匹配,那麼當前會出現很難找出的細微錯誤。我反而希望顯示一個非常明確的錯誤消息,告訴它存在不匹配,最好在鏈接時。

什麼是實現這個目標的好方法?

回答

6

我會假設你正在使用一個靜態庫和二進制你的意思是,這將在編譯時被鏈接的的.lib (而不是在運行時可能不匹配的DLL等)。

在我看來,最簡單的方法是在圖書館的cpp文件有這類的構建體在您的.h文件中

#ifdef _RELEASE //or whatever your compiler uses 
#define InitialiseLibrary InitialiseLibraryRelease 
#else 
#define InitialiseLibrary InitialiseLibraryDebug 
#endif 

同理:

#ifdef _RELEASE //or whatever your compiler uses 
void InitialiseLibraryRelease() 
{ 
    CommonInitialise(); 
} 
#else 
void InitialiseLibraryDebug() 
{ 
    CommonInitialise(); 
} 
#endif 

主現在exe使用庫:

InitialiseLibrary(); 

如果庫和exe文件的版本不匹配,那麼鏈接呃會報告不匹配一個或其他InitialiseLibrary ...函數。

另一種方法是確保發佈和調試庫編譯爲不同名稱的文件,然後使用.p文件中的#pragma(而不是將項目庫明確包含在項目中)工作。 如上所述使用#ifdef,您可以在編譯時選擇使用哪個#pragma來鏈接哪個庫。這第二種技術並不能完全解決你的問題(因爲如果程序員試圖強制它不停止鏈接),但它是處理這種困難的一種常規方式(並且在複雜的構建環境中具有優勢)

-1

使用#error指令,將中止編譯:

#ifndef RELEASE_VERSION 
#error Release version required 
#endif 
+0

-1提問者希望庫和可執行文件匹配 - 他不希望被編譯發佈。 – Elemental 2011-01-31 12:15:50

0

還可以檢查安裝腳本中的二進制文件/庫。雖然不是C的答案。

相關問題