我有一些遗留的C ++代码,我不想移动到(静态)库(.lib)。 但是,遗留的C ++代码使用全局对象的构造函数来进行一些初始化(请不要讨论这可能是不好的做法 - 它基本上可以工作,它的遗留代码我不想改变)。只要全局对象成为.exe的一部分,只要源代码及其包含该全局对象的.obj文件是visual studio(2008)中的.exe项目的一部分,就会发生这种情况。如果我将模块移动到库中,链接器将不包含此模块,因为它不会被.exe的任何模块引用。所以我需要强制将该模块链接到.exe
我知道链接器cmd行选项/ INCLUDE,我也可以使用#pragma comment(linker,“/ iclude:...”)指定。但是,有一些问题:
所以我正在寻找的是Visual Studio 2008中的一种方法,通过定义库模块来强制链接模块,如:“如果库X.lib被指定为链接器的输入,那么模块Y.无论其他模块是否引用任何引用,X.lib的obj将始终链接到.exe。最好不要使用装饰名称。
答案 0 :(得分:1)
所以我要回答我自己的问题。事实上,这是另一种解决方法。
解决方法不是链接器选项,而是VS设置,只有在.lib和.exe都在同一个解决方案中并且.exe中的.exe与.lib的依赖关系正确分离时才有效。解决方案设置。
在" Linker Property Page" .exe集的VS项目"使用库依赖项输入"到"是"所以.lib的.obj将被用来代替.lib作为链接器输入。由于链接器包含指定为输入的所有.obj(无论是否引用),因此效果类似于将.lib的所有源模块指定为.exe项目本身的一部分。
http://msdn.microsoft.com/en-us/library/024awkd1%28v=vs.90%29.aspx
一个缺点是,此设置不是.lib特定的。它会影响解决方案中的所有依赖.lib(但不会影响指定为附加输入的库)。检查链接器命令行以了解效果。