当前位置:  开发笔记 > 编程语言 > 正文

强制visual studio链接lib文件中的所有符号

如何解决《强制visualstudio链接lib文件中的所有符号》经验,为你挑选了2个好方法。

有没有办法强制visual studio将lib文件中的所有符号链接到dll中,因为它正在优化程序在运行时使用dll所需的"未使用"函数.

我尝试使用/ OPT:NOREF和/ OPT:NOICF,但它们似乎不起作用.

我需要它们的原因是因为它们是全局类,它们用控制器注册它们并且它们没有在dll中链接.



1> Andrew Grant..:

我不知道在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; }

它不是很优雅,但我们还没有找到适用于跨平台的更好的解决方案.



2> Ofek Shilon..:

实际上,有一个半官方的解决方案,就在这里。

TL; DR:

“使用库依赖项输入”

在VS术语中,“库依赖项输入”是构成库的obj文件的名称。您实际上可以在两个范围内控制此行为:

    每次引用:通过引用属性中的“使用库依赖项输入”组合。这是我个人使用的解决方案,也是帖子中提到的解决方案。

    对于整个可执行文件:在exe项目属性中/ C ++ / Linker / General /使用库依赖项输入->是

这些奥秘设置的历史动机是在以前没有的位置启用增量链接,但是它具有直接链接到打包在lib中的obj文件的链接的有用副作用,从而也构造了未引用的全局对象。

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有