我在 Visual Studio 2022 中有一个C++项目,该项目创建了一个调用 MASM 汇编程序创建的函数的.dll。但是,汇编程序 - ml64 - 不考虑单个.inc
文件,因此失败并出现error LNK2019: unresolved external symbol
错误。
我有一个文件,Core.asm
链接到V.inc
哪个又链接到V_Constants.inc
。这些文件使用include
链接在一起,所以Core.asm
有include V.inc
,而include V_Constants.inc
又有。
最初这很有效,但是当我以微不足道的方式更改Core.asm
时,一切都停止了。我可以清空文件以排除任何奇怪的语法错误,我得到相同的结果。
更改输出以显示它正在做什么(尽可能多地,通过删除/nologo 命令行)表明汇编程序缺少V.inc
,但包括其他所有内容。
什么可以阻止ml64.exe
忽略文件?是否可以强制组装?
有趣的是,如果我重命名V.inc
则会出现cannot open file: v.inc
错误。所以它知道包含这个文件,但它不想组装它。
看起来 Visual Studio 2022 中的某些内容将.vcxproj
文件中 xml 中的包含元素从MASM
更改为text
。我不知道为什么。
这就是我所拥有的,请注意V.inc
的错误元素.
<ItemGroup>
<MASM Include="Core.asm" />
</ItemGroup>
<ItemGroup>
<MASM Include="V_Constants.inc" />
</ItemGroup>
<ItemGroup>
<Text Include="V.inc" />
</ItemGroup>
Edit:所以事实证明最初的问题是主.asm文件需要包含外部文件。这些不能作为MASM
元素包含在项目文件中。
此外,我在这些.inc
文件的末尾有END
指令,这是不正确的,因为它会停止处理。(我添加了这些,因为当文件具有MASM
元素时,汇编程序会抱怨没有END
。这是一个大红鲱鱼,把我引向错误的道路。
tl;dr:包含的文件应标记为Text
,并且不要为这些文件添加END
!
Edit 2:但是,将这些文件标记为文本会阻止在更改项目时重新编译项目。