1

Visual Studio 2010 のツールチェーンを使用して DLL を生成しています。具体的には、Matlab モジュールが必要です。私はかなり近いと思いますが、次のエラーが発生しています。

LIBCMT.lib(crt0.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
.libs/AverageFilter.mexw32 : fatal error LNK1120: 1 unresolved externals

共有ライブラリにシンボルが存在しても意味がないため、私の DLL にはそのようなシンボルはありません。ただし、「libcmt.lib」には、実行可能ファイルと DLL の両方のシンボルが含まれています。そのため、エラーは理解していますが、明示的に DLL を作成しているため、Microsoft のリンカーがこの特定の未解決のシンボルを無視することを期待していました。

私が理解しているように、DLL を作成するときは、未定義のシンボルがないことが期待されますが、そのようなシンボルだけが無関係であるため、「/FORCE」オプションを使用することにしました。私はこの解決策が本当に嫌いですが、まずMatlabモジュールを動作させてから、解決策を改良したいと思います.

残念ながら、「/FORCE」オプションを使用すると、次のエラーが発生します。

cl : Command line error D8021 : invalid numeric argument '/FORCE'

これらのエラーを解決するにはどうすればよいですか? Microsoft のリンカーに特定の未解決のシンボルを無視させる方法はありますか?

4

1 に答える 1

1

Windows の Exe と Dll には、実行可能コードが含まれている場合、エントリ ポイントが必要です。DllMain については、次の MSDN ページを参照してください。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682583(v=vs.85).aspx

exe の場合、コンソール アプリの場合は main()、純粋な win32 API アプリの場合は WinMain になる傾向があります。

あなたの DLL は main() を必要としているので、EXE コンソール プロジェクトを作成し、後でそれを DLL に変更したに違いないと思います。

問題を解決するには、通常は DllMain であるエントリ ポイント関数を作成する必要がありますが、実際にはメインです。DLL のエントリ ポイントは何も実行できません (つまり、空/スタブ関数)。これにより、リンクが許可され、OS によってロード/アンロードされます。これにより、クライアントはコードを呼び出すことができます :)。

于 2013-04-30T21:58:49.950 に答える