Visual Studio 2019 中的问题组装,简单的“Hello World”legacy_stdio_definitions.lib

Posted

技术标签:

【中文标题】Visual Studio 2019 中的问题组装,简单的“Hello World”legacy_stdio_definitions.lib【英文标题】:Problem Assembling in Visual Studio 2019, Simple "Hello World" legacy_stdio_definitions.lib 【发布时间】:2021-10-30 02:40:26 【问题描述】:

所以我正在关注“汇编语言指南。简明介绍”一书。詹姆斯·T·斯特雷布。我正在尝试在 Visual Studio 2019 中运行以下程序:

includelib msvcrt.lib 
includelib legacy_stdio_definitions.lib

.686
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte 
.data
msg1 byte "Hello World!",0Ah,0 
.code
main proc
INVOKE printf, ADDR msg1
ret
main endp
end

书上建议将顶部的库添加到链接器->输入->附加依赖项,但是在trilling组装代码时出现以下错误 仍然出现: LINK:致命错误 LNK1104:无法打开文件“legacy_stdio_definitions”。

有谁知道问题出在哪里? 书中提供的代码是否有效? 有什么方法可以让程序按照它编写的方式工作? 非常感谢。

【问题讨论】:

它位于以下路径:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.16.27023\lib\x86\store\legacy_stdio_definitions .lib 你知道我怎样才能让它对链接器可见吗? 【参考方案1】:

解决方案 1 legacy_stdio_definitions.lib 尚未添加到您的项目中,请按照此步骤解决错误。

    在 Visual Studio 中打开项目 点击顶部菜单栏的项目 单击属性 > 链接器 > 输入 在其他依赖项中 点击旁边的向下箭头,然后点击“编辑”。

添加“legacy_stdio_definitions.lib”并点击“OK”,然后点击“OK”。

解决方案 2 注意: 如果 legacy_stdio_definitions.lib 无法解析符号,则 Microsoft 建议将静态库包装在 DLL 中。

因此, 您需要使用用于创建要包装的静态库 (libpost.lib) 的相同版本的 Visual Studio 构建包装器 DLL。所以使用VS2010来创建DLL及其导入库。

在 VS2019 项目中删除对静态库及其头文件的所有引用。使用 DLL 的导入库及其导出的包装函数。另外

使用 VS2010 构建 DLL 应该解决与 libpost.lib 的任何链接问题 至少,您的 DLL 应该为您的 VS2019 项目需要的功能导出包装器。我假设如果您尝试构建 VS2019 项目但省略向链接器提供 libpost.lib,则生成的有关未解析符号的错误消息应作为包装 DLL 需要导出的内容的指南。我还假设您有一个头文件,其中包含 libpost.lib 的函数原型(可能还有其他相关信息)。

如果您要更新与 libpost.lib 链接的其他旧项目,包装和导出其他函数和变量可能是有意义的。

请务必注意 MS 的指导,不要将 VS2010 中的 CRT 详细信息泄露到 DLL 边界,以获取您的包装器导出的任何内容。

【讨论】:

以上是关于Visual Studio 2019 中的问题组装,简单的“Hello World”legacy_stdio_definitions.lib的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2019 中的“ildasm”在哪里?

Visual Studio 2019 中的访问设置

如何解决 Visual Studio 2019 中的这个 dll 缺失问题?

如何摆脱 Visual Studio 2019 中的密码提示?

导航到 Visual Studio 2019(或 Rider)中的 MediatR 处理程序

什么会导致 Visual Studio 中的 LNK2019 错误?