0

Visual C++ 2008 を使用して小さな Win32 アプリケーションを構築しようとしていますが、追加のライブラリを出荷したり、それらを静的にリンクしてサイズを肥大化させたりすることなく、最新の Windows マシンで実行したいと考えています。

このトピックに関するインターネット上の多くの記事を読みました: http://kobyk.wordpress.com/2007/07/2...visual-c-2005/

Visual Studio の新しいバージョンごとに変更される msvcr90 のような新しいランタイムとは対照的に、システム dll である最新の Windows にある msvcrt.dll に私のプロジェクトを動的にリンクすることをお勧めします。

そのため、リンカー オプションでは、すべての既定のライブラリ (/NODEFAULTLIB) を無視しました。追加の依存関係に msvcrt.lib を追加しました。

しかし、コンパイル時に次のような「未解決の外部シンボル」エラーが大量に発生します。

1>StubLib.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall std::bad_cast::~bad_cast(void)" (??1bad_cast@std@@UAE@XZ)
1>StubLib.obj : error LNK2001: unresolved external symbol "public: __thiscall std::bad_cast::bad_cast(char const *)" (??0bad_cast@std@@QAE@PBD@Z)
1>StubLib.obj : error LNK2001: unresolved external symbol "public: __thiscall std::bad_cast::bad_cast(class std::bad_cast const &)" (??0bad_cast@std@@QAE@ABV01@@Z)
1>StubLib.obj : error LNK2001: unresolved external symbol "long const std::_BADOFF" (?_BADOFF@std@@3JB)

また、Minicrt、WCRT などのサイズの肥大化を抑えるように設計された代替の C++ ランタイム ライブラリを使用しようとしましたが、いずれにしても「未解決の外部シンボル」エラーが発生します。

どんな助けでも大歓迎です、

前もって感謝します

4

1 に答える 1

0

この場合の「肥大化」は、STL の使用に起因します。そのため、コードをリファクタリングして STL 参照を削除したくない場合は、運が悪いだけかもしれません。

ただし、WDK を使用してアプリケーションをビルドすることをお勧めします。Windows XP では、msvcrt.dll はシステム DLL (つまり、常にオンボードであり、再配布可能ファイルは必要ありません) に「騎士化」されており、私の知る限り、Windows 2000 SP4+SRP にも含まれていました。したがって、これらの最小要件で問題ない場合は、WDK を使用してアプリケーションをビルドすると、サポートされているシステムに既にあるはずの DLL にすべての "肥大化" が含まれます。

于 2011-02-24T16:19:58.280 に答える