2009-09-03 62 views
2

我想使用MSVC编译器来构建DLL文件。使用MSVC从命令行构建DLL(无入口点)

问题是该DLL没有主入口点。它应该是一个由应用程序用作插件的共享DLL。我可以使用GCC这样编译:

GCC -c plugin.c 的gcc -o -shared plugin.dll plugin.o interface.def

DEF文件是逃避名在函数出口重整(这是应用程序通过该功能使用插件的方式)。

如果我尝试使用MSVC编译它,连接器会抱怨必须定义入口点。

我想问另一个问题,在MS Visual Studio套件中有没有像GCC“strip”这样的工具来减少EXE的文件大小?

+0

你或许应该只问了另一个问题在...另外一个问题。在第二个问题上有专业知识的人可能无法看到它被埋在这个问题中。 – 2009-09-03 14:36:57

+0

我同意,感谢您的评论。 – Shantia 2009-09-09 00:21:02

回答

3

虽然DLL不需要入口点,但Microsoft C运行时需要一个入口点来初始化它自己。有没有一个空的DllMain的理由?

当构建,它使用任何的 C运行时库,为了 一个DLL确保CRT是正确 初始化,无论是

  1. 初始化 功能必须命名的DllMain()和 的入口点必须与 指定链接器选项-entry :_DllMainCRTStartup @ 12 - 或 -

  2. DLL的入口点必须显式调用 CRT_INIT()上进程附加和 进程分离

KB94248

+0

谢谢,不,没有理由,示例插件没有hava主入口点,这就是为什么我这样做。无论如何,我发现给连接器添加/ DLL选项可以让你做我想做的事,也许你可以将它添加到答案中,使其更加完整。谢谢你的一切! – Shantia 2009-09-09 00:26:35