windows - DLL 链接器问题

标签 windows dll linker

我正在编译一个 DLL 两次(一次用于 x86,一次用于 x64)并且我已将/ENTRY 设置为“DllMain”。我正在使用/MT 运行时库选项静态链接运行时库。这在进行 x86 构建时一切正常,但 x64 构建失败并出现以下情况:

error LNK2019: unresolved external symbol main referenced in function __tmainCRTStartup
{project directory}\LIBCMT.lib(crt0.obj)

为什么这适用于 x86 构建而不适用于 x64 构建?我在这里缺少什么吗?

最佳答案

不是直接的答案,但它可能是严格相关的:如评论中所述,您应该避免以这种方式更改入口点:通常真正的入口点由 CRT 提供的“假”DllMain 获取以初始化其内部数据结构(如 here 所述),所以你绕过了它。大小减小可能是由于删除了 CRT 初始化代码。

您的 dll 正在使用未初始化的 CRT,这非常糟糕。您应该保留默认入口点,顺便说一句,这应该可以解决您的问题。

顺便说一下,请注意实际上您可以在没有 CRT 的情况下创建一个 dll(而且它会变得非常小),但是您根本不应该使用 CRT ,甚至没有链接到它(/NODEFAULTLIB 开关)。这意味着您可以只使用您明确链接的库(例如 Windows API),但我怀疑您会失去一些 C++ 功能(我认为至少是异常和 RTTI)。

关于windows - DLL 链接器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3681065/

相关文章:

windows - 在 Windows 中通过常规文件传输 1-2 兆字节的数据 - 它比通过 RAM 慢吗?

Linux 和 Windows 中的 java.io.File 和路径

windows - 内存映射文件是线程安全的吗

c++ - 如何在托管 dll 中重新初始化 native 代码

android - 加载依赖于其他共享库的共享库

c++ - Hook WH_CALLWNDPROC 后未获取窗口过程消息

delphi - 在 Freepascal 编译的 DLL 和 Delphi 编译的 EXE 之间交换字符串 (PChar)

c++ - 在内存中分配多个结构

c++ - 如何在 Arch 中安装 libx11-dev? (以下为原标题)

c++ - 包含 MFC 对象库时无法解析的外部符号