有没有办法强制visual studio将lib文件中的所有符号链接到dll中,因为它正在优化程序在运行时使用dll所需的"未使用"函数.
我尝试使用/ OPT:NOREF和/ OPT:NOICF,但它们似乎不起作用.
我需要它们的原因是因为它们是全局类,它们用控制器注册它们并且它们没有在dll中链接.
我不知道在Visual Studio中是否有更优雅的方式,但我们使用它的跨平台解决方案有两个宏强制将problamatic目标文件链接起来.
一个放在被排除的函数的源文件中,另一个放在链接器知道将被调用的函数中.
就像是;
#define FORCE_LINK_THIS(x) int force_link_##x = 0; #define FORCE_LINK_THAT(x) { extern int force_link_##x; force_link_##x = 1; }
它不是很优雅,但我们还没有找到适用于跨平台的更好的解决方案.
实际上,有一个半官方的解决方案,就在这里。
TL; DR:
“使用库依赖项输入”。
在VS术语中,“库依赖项输入”是构成库的obj文件的名称。您实际上可以在两个范围内控制此行为:
每次引用:通过引用属性中的“使用库依赖项输入”组合。这是我个人使用的解决方案,也是帖子中提到的解决方案。
对于整个可执行文件:在exe项目属性中/ C ++ / Linker / General /使用库依赖项输入->是
这些奥秘设置的历史动机是在以前没有的位置启用增量链接,但是它具有直接链接到打包在lib中的obj文件的链接的有用副作用,从而也构造了未引用的全局对象。