0

我正在尝试使用 Visual C++ 2008 构建一个小型 Win32 应用程序,但我希望它可以在任何现代 Windows 机器上运行,而不必提供额外的库,也不必增加静态链接它们的大小。

我在互联网上阅读了很多关于这个主题的文章,比如这个: http: //kobyk.wordpress.com/2007/07/2...visual-c-2005/

我知道一个好主意是将我的项目动态链接到 msvcrt.dll,它可以在任何现代 Windows 作为系统 dll 中找到,而不是像 msvcr90 这样的新运行时会随着每个新的 Visual Studio 版本而变化。

所以在链接器选项中,我忽略了所有默认库 (/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)

我还尝试使用一些替代 C++ 运行时库,旨在减少 Minicrt、WCRT 等体积膨胀,但无论如何我都会收到“未解析的外部符号”错误。

任何帮助是极大的赞赏,

提前致谢

4

1 回答 1

0

这种情况下的“膨胀”来自于 STL 的使用。因此,除非您想重构代码以摆脱 STL 引用,否则您可能只是运气不佳。

但是,我可以建议使用 WDK 来构建应用程序。在 Windows XP 中,msvcrt.dll 被“授予”系统 DLL(即始终存在,无需再发行组件),据我所知,它也包含在 Windows 2000 SP4+SRP 中。因此,如果这些最低要求对您来说没问题,请使用 WDK 构建您的应用程序,所有“膨胀”都将位于 DLL 中,这些 DLL 应该已经在任何受支持的系统上。

于 2011-02-24T16:19:58.280 回答