2009-09-03 64 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