0

我正在使用 Visual Studio 的 MASM(称为ML)为 Wintel-32 构建一个项目。我请求在链接器选项中生成地图文件。我正在为汇编程序指定 /Zf 选项(使所有符号全局化)。然而,并非所有功能都出现在生成的地图文件中。看起来只出现了由其他模块导入的那些。

编辑:有一堆函数只能静态使用(即在同一个源文件中)。它们不会从可执行文件中删除,也不应该被删除。但它们不会出现在 MAP 文件中。我要他们在那里。

dumpbin /symbols如果我调用目标文件(但只能使用 /Zf),可以看到这些名称。然而,链接器出于某种原因将其从最终可执行文件的映射中剥离。链接器选项 /MAP 和 /MAPINFO:EXPORTS 在那里。我错过了什么?

编辑:和 /OPT:NOREF 也是。

4

1 回答 1

0

您的项目中可能启用了以下选项。
- COMDAT 生成,即编译期间的功能级链接
- /OPT=NOREF链接期间的链接器优化

以上两个选项都告诉编译器/链接器丢弃未使用的函数。

例如,ML使用如下链接器选项更新调用 MASM 链接器的命令,以/OPT在最终可执行文件中保留未使用的函数:

ML [you-options] <your-file-name>/link /OPT:REF

于 2013-07-09T07:08:19.787 回答