2019 年 Visual Studio 组装问题,简单 "Hello World" legacy_stdio_definitions.lib
Problem Assembling in Visual Studio 2019, Simple "Hello World" legacy_stdio_definitions.lib
所以我正在关注《汇编语言指南》这本书。简明介绍。詹姆斯·T·斯特里布 (James T. Streib)。我正尝试在 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
书上建议将最上面的库添加到linker->Input->Additional dependencies,但是在汇编代码的时候出现如下错误
仍然出现:
LINK:致命错误 LNK1104:无法打开文件 'legacy_stdio_definitions.'
有人知道问题出在哪里吗?
书中提供的代码有效吗?
有什么方法可以使程序按照编写的方式工作吗?
非常感谢。
解决方案 1
legacy_stdio_definitions.lib 尚未添加到您的项目中,请按照此步骤解决错误。
- 在Visual Studio
中打开项目
- 单击顶部菜单栏中的“项目”
- 单击“属性”>“链接器”>“输入”
在附加依赖项中
单击旁边的向下箭头,然后单击“编辑”。
添加 "legacy_stdio_definitions.lib" 并单击“确定”,然后单击“确定”。
解决方案 2
注:
如果 legacy_stdio_definitions.lib 无法解析符号,则 Microsoft 建议将静态库包装在 DLL 中。
因此.,
您需要使用与用于创建您正在包装的静态库 (libpost.lib) 相同版本的 Visual Studio 构建包装器 DLL。所以使用VS2010创建DLL及其导入库
在 VS2019 项目中删除所有对静态库及其 header 的引用。使用 DLL 的导入库及其导出的包装函数。
另外
用 VS2010 构建 DLL 应该解决 libpost.lib 的任何链接问题
至少,您的 DLL 应该为您的 VS2019 项目运行所需的内容导出包装器。我假设如果您尝试构建 VS2019 项目但忽略向链接器提供 libpost.lib,则关于未解析符号的结果错误消息应作为包装器 DLL 需要导出的内容的指南。我还假设您有一个 header 文件,其中包含 libpost.lib.
的函数原型(可能还有其他相关信息)
如果您要更新与 libpost.lib 链接的其他旧项目,则包装和导出其他函数和变量可能有意义。
请务必注意 MS 指南,关于不通过 DLL 边界从 VS2010 泄漏您的包装器导出的任何内容的 CRT 详细信息。
所以我正在关注《汇编语言指南》这本书。简明介绍。詹姆斯·T·斯特里布 (James T. Streib)。我正尝试在 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
书上建议将最上面的库添加到linker->Input->Additional dependencies,但是在汇编代码的时候出现如下错误 仍然出现: LINK:致命错误 LNK1104:无法打开文件 'legacy_stdio_definitions.'
有人知道问题出在哪里吗? 书中提供的代码有效吗? 有什么方法可以使程序按照编写的方式工作吗? 非常感谢。
解决方案 1
legacy_stdio_definitions.lib 尚未添加到您的项目中,请按照此步骤解决错误。
- 在Visual Studio 中打开项目
- 单击顶部菜单栏中的“项目”
- 单击“属性”>“链接器”>“输入” 在附加依赖项中 单击旁边的向下箭头,然后单击“编辑”。
添加 "legacy_stdio_definitions.lib" 并单击“确定”,然后单击“确定”。
解决方案 2
注:
如果 legacy_stdio_definitions.lib 无法解析符号,则 Microsoft 建议将静态库包装在 DLL 中。
因此., 您需要使用与用于创建您正在包装的静态库 (libpost.lib) 相同版本的 Visual Studio 构建包装器 DLL。所以使用VS2010创建DLL及其导入库
在 VS2019 项目中删除所有对静态库及其 header 的引用。使用 DLL 的导入库及其导出的包装函数。
另外
用 VS2010 构建 DLL 应该解决 libpost.lib 的任何链接问题
至少,您的 DLL 应该为您的 VS2019 项目运行所需的内容导出包装器。我假设如果您尝试构建 VS2019 项目但忽略向链接器提供 libpost.lib,则关于未解析符号的结果错误消息应作为包装器 DLL 需要导出的内容的指南。我还假设您有一个 header 文件,其中包含 libpost.lib.
如果您要更新与 libpost.lib 链接的其他旧项目,则包装和导出其他函数和变量可能有意义。
请务必注意 MS 指南,关于不通过 DLL 边界从 VS2010 泄漏您的包装器导出的任何内容的 CRT 详细信息。