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

发布于 2024-10-18 04:35:52 字数 525 浏览 3 评论 0原文

使用 Microsoft Visual C++ 6.0 编译 C++ 时有时会出现这样的链接错误:

error LNK2001: unresolved external symbol __imp__close
错误 LNK2001:无法解析的外部符号 __imp__read
错误 LNK2001:无法解析的外部符号 __imp__lseek
错误 LNK2001:无法解析的外部符号 __imp__open

我使用 Google 搜索了很长时间但毫无结果后发现,我的修复是:

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

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

Link errors like this sometimes occur when compiling C++ using Microsoft Visual C++ 6.0:

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

My fix, which I found after searching fruitlessly using Google for a long time, is this:

Do NOT disable language extensions. In the Project Settings dialog, in the C/C++ tab, make sure that the 'Disable language extensions' checkbox is not checked.

The functions close, read, lseek, open, etc., are not standard parts of the C library and the declarations are skipped by conditional compilation using #if !__STDC__ in <io.h>. This happens if you disable language extensions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

铁轨上的流浪者 2024-10-25 04:35:52

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

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

The answer is that the __imp prefix refers to function stubs in the OBJ library for the DLL version of the CRT. This means your linker options are incompatible with your compiler options (linker set to static CRT or no CRT and compiler set to dynamic CRT).

In your case rather than the CRT itself it is another library, but the same idea.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文