使用 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__close
error LNK2001: unresolved external symbol __imp__read
error LNK2001: unresolved external symbol __imp__lseek
error 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 )