在Visual Studio 2010中编译wxWidgets时,我收到此链接器错误。
msvcrt.lib(wcrtexew.obj) : error LNK2001: unresolved external symbol _wWinMain@16
现在问题就在于此。 wxWidgets的入口点就是这个宏:
IMPLEMENT_APP(MyApp)
这意味着我不使用wWinMain()作为条目。
我在编译(/ NOENTRY)时尝试禁用入口点,但没有骰子。似乎没有任何作用,因为如果我定义wWinMain(),那么wxWidgets将无法启动,因为该条目是IMPLEMENT_APP。
当我编译为静态时,我只收到此错误。如果我不编译为静态,我将不得不提供DLL:Windows Server 2008上的msvcp100d.dll和msvcr100d.dll(可能在未安装库的旧版Windows上有更多的DLL)。
现在我理解我再次链接调试库,但是如果我再次链接该版本应该没关系,因为我应该收到相同的错误(未解析的外部符号_wWinMain @ 16)。
任何解决方案?
答案 0 :(得分:1)
当您链接到静态库时,您必须确保使用与构建应用程序代码时使用的EXACT SAME参数构建库。
所以:遍历库构建和应用程序构建的所有编译器选项,并确保它们匹配。此外,请确保应用程序构建链接到使用您匹配的配置构建的静态库。
这很痛苦!您必须决定是否要处理此问题,或者在目标计算机上安装正确的DLL的问题。无论哪种方式,您都必须解决配置管理问题。
在您的特定问题中,我看到链接器正在寻找_wWinMain @ 16,这表明您已经打开unicode构建应用程序代码,但是链接到非unicode静态库。
答案 1 :(得分:0)
你有吗
IMPLEMENT_APP(MyApp)
在.cpp文件中?它通常位于IMPLEMENT_APP(MyApp)
所在的随附文件中。
我使用wxWidgets作为静态库,这就是我要编译的。
答案 2 :(得分:0)
首先使用项目中的相同设置编译wxWidgets库(wxWidgets \ build \ msw)。所以我启用“/ MT”,“在静态库中使用MFC”,并将项目输出为“Release”。我编码的wxWidgets应用程序上的设置相同。
现在评论:
IMPLEMENT_APP(MyApp)
并将其用作您的切入点:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPWSTR lpCmdLine, int nShowCmd)
{
char *buf;
buf = new char[wcslen(lpCmdLine) + 1];
wcstombs(buf, lpCmdLine, wcslen(lpCmdLine) +1);
wxApp::SetInstance( new MyApp());
wxEntry(hInstance, prevInstance, buf, nShowCmd);
wxEntryCleanup();
}
答案 3 :(得分:0)
我将项目的字符集更改为unicode后出现了同样的问题。我的项目使用多线程调试DLL(/MDd
)。上面的解决方法也适用于我,但我想找出实际导致问题的原因并使用IMPLEMENT_APP
。
我改变了"使用MFC"到"使用标准Windows库"我成功地建立了这个项目。