我正在尝试使用Visual C ++ 2008构建一个小型Win32应用程序,但我希望它能够在任何现代Windows机器上运行,而无需发送额外的库,也不必夸大其静态链接它们的大小。
我在互联网上阅读了很多关于这个主题的文章,例如:http://kobyk.wordpress.com/2007/07/2...visual-c-2005/
我知道一个好主意是将我的项目与msvcrt.dll联系起来,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等的大小膨胀,但无论如何我得到“未解决的外部符号”错误。
非常感谢任何帮助,
提前致谢
答案 0 :(得分:0)
这种情况下的“臃肿”来自于STL的使用。因此,除非你想重构你的代码以摆脱STL引用,否则你可能只是运气不好。
但是,我可以建议使用WDK来构建应用程序。在Windows XP中,msvcrt.dll被“封锁”到系统DLL(即总是在板上,不需要可再发行组件),据我所知,它也包含在Windows 2000 SP4 + SRP中。因此,如果这些最低要求适合您,请使用WDK构建您的应用程序,并且所有“膨胀”都将存在于任何受支持系统上的DLL中。