2009-09-03 6 views
2

MSVCコンパイラを使用してDLLファイルを作成したい。MSVCでコマンドラインからDLLを作成する

問題は、DLLにメインエントリポイントがないことです。これは、アプリケーションによってプラグインとして使用される共有DLLであるはずです。私はGCCをこの方法を使用して、それをコンパイルすることができます。

のgcc -c plugin.c のgcc -shared -o plugin.dll plugin.o

interface.def DEFファイルは、関数のエクスポートで名前マングリングを回避することです(これは、アプリケーションがプラグインを使用する方法です)。

MSVCを使用してコンパイルしようとすると、リンカはエントリポイントを定義する必要があると不満を持ちます。

私は別の質問をしたいと思いますが、EXEのファイルサイズを減らすために、GCCの "strip"のようなMS Visual Studioスイートにツールがありますか?

+0

を切り離す必要があります。あなたの2番目の質問に専門知識を持っている人は、それをこの質問に埋め込むことができないかもしれません。 –

+0

コメントに感謝します。 – Shantia

答えて

3

DLLはエントリポイントを必要としませんが、Microsoft Cランタイムでは、初期化するためにエントリポイントが必要です。空のDllMainを持たない理由はありますか?

初期 関数は名前を付ける必要があります

  1. いずれか、CRTが正しく初期化さ であることを確認 にするために、 Cランタイムライブラリのいずれかを使用してDLLをビルドしますDllMain()と エントリポイントは リンカオプション -entryで指定する必要があります:12 @ _DllMainCRTStartup - または -

  2. DLLのエントリポイントを明示的に 呼び出しCRT_INIT()のプロセスにアタッチして プロセスはおそらくちょうどに...別の質問その他の質問をする必要があります

KB94248

+0

ありがとう、いいえ、その理由はありませんでした。サンプルプラグインは、私がそれを持っていた理由です。とにかく、/ DLLオプションをリンカに追加すると、私が望むことをすることができます。おそらく、それをより完全なものにするために答えに追加することができます。すべてありがとう! – Shantia

関連する問題