2013-03-19 60 views
6

我使用Visual Studio 2012包括一個預處理器指令中的靜態庫

我多次使用預處理指令類似

#ifdef something 
     #include<some_header.h> 
#else 
     #include<other_header.h> 
#endif 

我想知道是否有可能以類似的鏈接靜態庫方法:

#ifdef something 
     // use some_library.lib 
#else 
     // use other_library.lib 
#endif 

問題,來自我previous question主題:我有兩個靜態庫lib1.lib,lib2.lib在(不是他們的代碼)沒有命名空間,與相同的函數原型,但具有不同的實現。

+0

你要求的是瘋狂。如果兩個庫沒有相同的方法簽名,並且它們確實具有相同的方法簽名,則這兩個庫沒有任何意義,這可能應該是一個翻轉的運行時設置(例如日誌記錄或其他調試信息) – 2013-03-19 15:07:19

+2

@ RichardJ.RossIII它是一個完全有效的情況。例如,鏈接到調試庫與發佈庫。它通常不是通過#pragmas,而是通過項目配置。 – SomeWittyUsername 2013-03-19 15:10:29

回答

7

如果您使用的MSVC,你可以做

#ifdef something 
     #pragma comment(lib,"xxx.lib") 
#else 
     #pragma comment(lib,"zzz.lib") 
#endif 

在GCC你不能做到這一點。