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

Gra*_*her 1 c c++ visual-c++-6 linker-errors

使用 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 库的标准部分,并且使用#if !__STDC__in的条件编译会跳过这些声明<io.h>。如果您禁用语言扩展,就会发生这种情况。

Ben*_*Ben 5

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

在你的例子中,它不是 CRT 本身,而是另一个库,但想法相同。