DLL链接器问题

时间:2010-09-09 22:39:09

标签: 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构建?我在这里缺少什么吗?

2 个答案:

答案 0 :(得分:1)

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

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

顺便说一下,注意实际上你可能在没有CRT的情况下制作一个dll(它会变得非常小),但你不应该使用CRT ,甚至没有链接(/NODEFAULTLIB开关)。这意味着你可以使用你明确链接的库(例如Windows API),但我怀疑你会丢失几个C ++特性(我认为至少有例外和RTTI)。

答案 1 :(得分:0)

这可能是一个愚蠢的问题,但你确定你在x64情况下作为DLL链接(即指定/DLL开关) - 因为投诉是关于main,我想知道它是否试图链接为可执行文件?