1

在 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。

当我编译为静态时,我只收到此错误。如果我不作为静态编译,我将不得不在 Windows Server 2008 上提供 DLL:msvcp100d.dll 和 msvcr100d.dll(在没有安装库的旧版本的 Windows 上可能还有更多 DLL)。

现在我明白我正在再次链接调试库,但如果我再次链接发布版本并不重要,因为我应该收到相同的错误(未解析的外部符号 _wWinMain@16)。

有什么解决办法吗?

4

4 回答 4

1

当您链接到静态库时,您必须确保使用与构建应用程序代码时完全相同的参数构建库。

所以:检查库构建和应用程序构建的所有编译器选项,并确保它们匹配。此外,请确保应用程序构建链接到使用您匹配的配置构建的静态库。

这是一种痛苦!您必须决定是要处理这个问题,还是要在目标机器上安装正确的 DLL。无论哪种方式,您都必须解决配置管理问题。

在您的特定问题中,我看到链接器正在寻找 _wWinMain@16 这表明您已经在打开 unicode 的情况下构建了应用程序代码,但正在链接到非 unicode 静态库。

于 2012-05-25T17:08:50.680 回答
0

你有

IMPLEMENT_APP(MyApp)

在 .cpp 文件中?它通常在随附文件中IMPLEMENT_APP(MyApp)的位置。

我将 wxWidgets 用作静态库,这就是我要编译的。

于 2012-05-25T16:37:15.730 回答
0

首先编译 wxWidgets 的库 (wxWidgets\build\msw),所有设置都与您在项目中的设置相同。所以我启用“/MT”,“在静态库中使用 MFC”,并将项目输出为“发布”。我编写的 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();
}
于 2012-05-26T02:45:32.547 回答
0

将项目的字符集更改为 unicode 后,我遇到了同样的问题。我的项目使用多线程调试 DLL ( /MDd)。上述解决方法也对我有用,但我想找出真正导致问题的原因并使用IMPLEMENT_APP.

在我将“使用 MFC”更改为“使用标准 Windows 库”后,我能够成功构建项目。

于 2014-10-13T10:26:18.570 回答