使用 Microsoft Visual C++ 6.0 解决 __imp__open 和其他类似名称的函数的链接错误

Posted

技术标签:

【中文标题】使用 Microsoft Visual C++ 6.0 解决 __imp__open 和其他类似名称的函数的链接错误【英文标题】:resolve link errors for __imp__open and other similarly named functions using Microsoft Visual C++ 6.0 【发布时间】:2011-02-18 11:56:55 【问题描述】:

在使用 Microsoft Visual C++ 6.0 编译 C++ 时,有时会出现类似的链接错误:

error LNK2001: unresolved external symbol __imp__closeerror LNK2001: unresolved external symbol __imp__readerror LNK2001: unresolved external symbol __imp__lseekerror LNK2001: unresolved external symbol __imp__open

我用谷歌搜索了很长时间后发现的解决方法是这样的:

不要禁用语言扩展。在项目设置对话框的 C/C++ 选项卡中,确保未选中“禁用语言扩展”复选框。

函数 close、read、lseek、open 等不是 C 库的标准部分,并且在 <io.h> 中使用 #if !__STDC__ 的条件编译会跳过声明。如果您禁用语言扩展,就会发生这种情况。

【问题讨论】:

你想问什么? 也没有意义。 LNK2001 是链接器错误,但 #if !__STDC__ 是编译时错误。 @MSalters #pragma comment(lib 可以让您进入定义预处理器宏或不会导致链接器错误的情况。 这篇文章的重点是帮助有同样问题的人。是的,它确实有道理。编译器标志会影响哪些运行时库链接到应用程序。 【参考方案1】:

答案是 __imp 前缀是指 CRT 的 DLL 版本的 OBJ 库中的函数存根。这意味着您的链接器选项与您的编译器选项不兼容(链接器设置为静态 CRT 或无 CRT,编译器设置为动态 CRT)。

在您的情况下,它不是 CRT 本身,而是另一个库,但想法相同。

【讨论】:

这不是真的。链接器和编译器选项是一样的。

以上是关于使用 Microsoft Visual C++ 6.0 解决 __imp__open 和其他类似名称的函数的链接错误的主要内容,如果未能解决你的问题,请参考以下文章

microsoft visual c++ 6.0英文版怎么安装?

使用 Microsoft Visual C++ 6.0 解决 __imp__open 和其他类似名称的函数的链接错误

在win7系统下,如何安装 Microsoft Visual C++ 6.0呢?谢谢····

电脑问题 Microsoft visual c++ Runtime Library

串口通信IN C++(适用于Microsoft Visual Studio 2010/2012/2013 ,VC++6.0 )

使用 Microsoft Visual C++ MFC 2021 进行编程