2011-02-23 46 views
4

我想在Windows中創建一個靜態庫(.lib),可以在後續版本中用作未定義函數的「備份」。具有默認功能的Windows靜態庫

例如,讓我們說,我有foobar.lib具有定義爲:

FOO 
BAR 

,我有一些其他的程序,只定義FOO和被內置到了必須導出FOOBAR一個DLL。我希望能夠利用foobar.lib自動導出的BAR默認定義中所產生的DLL(而忽略foobar.lib中的FOO定義)。

我已經嘗試發送foobar.lib到鏈接器,但我得到一個多重定義的符號錯誤(/ FORCE應該重寫,但強烈警告,它可能不會按預期工作)。我也嘗試使用/NODEFAULTLIB:foobar.lib,但它完全忽略了庫,並說BAR是未定義的。

我幾乎100%肯定有一種方法可以做到這一點,因爲我使用這樣做的應用程序(Abaqus)來允許用戶編寫插件,而無需爲插件定義所有必需的導出,在DLL中。他們不使用/ FORCE選項。

回答

2

我想出了一個解決方案(不知道它是唯一的還是最好的解決方案)。

我試圖使用一個目標文件(foobar.obj)在foobar.lib中定義FOOBAR。如果我將它分解爲foo.obj和bar.obj,然後使用它們來創建foobar.lib,鏈接器可以有效地忽略相應的.obj文件。

所以簡短的答案是:靜態庫的每個目標文件一個函數。