2011-02-23 52 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文件。

所以简短的答案是:静态库的每个目标文件一个函数。