2

我使用以下配置构建 Qt:

-platform win32-msvc2012 -no-icu -no-angle -opengl desktop -static -qt-sql-mysql -qt-plugins-mysql -nomake demos -nomake examples

一切顺利。顺便提一句。我还在 qmake.conf 中将 win32-msvc2012 mkspecs /MD 更改为 /MT 以进行静态链接(根据一些说明)。现在我尝试使用静态链接在 Visual Studio 2012 中构建最简单的应用程序。所以我创建了一个简单的项目(这个基本的项目,来自 Qt Visual Add-in),它是:

#include "test.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 test w;
 w.show();
 return a.exec();
}

(测试只是一个普通的窗口)并设置我记得的两件事,因为我在 Visual Studio 2010 上这样做:1)项目属性 -> C/C++ -> 代码生成 -> 运行时库我设置为 MT 2)项目属性-> 常规 -> 使用 MFC 我设置为在静态库中使用 MFC

当然,在 Qt 项目设置中,我设置了我的 Qt 静态版本。在这个配置中,我遇到了很多错误 - http://pastebin.com/6ve3pFUh [pastebin.com] 所有库(我认为所有)都是由 Qt 插件添加的(qtmain.lib Qt5Core.lib Qt5Gui.lib Qt5Widgets.lib)。如果我将使用 MFC 设置为默认值,即使用标准 Windows 库,那么我会得到这个:

1>     Creating library D:\Visual Studio 11\Projects\test\Win32\Release\test.lib and object D:\Visual Studio 11\Projects\test\Win32\Release\test.exp
1>Qt5Core.lib(qeventdispatcher_win.obj) : error LNK2019: unresolved external symbol _WSAAsyncSelect@16 referenced in function "private: void __thiscall QEventDispatcherWin32::createInternalHwnd(void)" (?createInternalHwnd@QEventDispatcherWin32@@AAEXXZ)
1>D:\Visual Studio 11\Projects\test\Win32\Release\\test.exe : fatal error LNK1120: 1 unresolved externals

我完全不知道发生了什么。在 Visual Studio 2010 和 Qt 4.8 中,一切都以这种方式完美运行。我读了一些关于我应该添加的更多外部依赖项的内容,但我不确定。哦,顺便说一句——在 QtCreator 中,这个静态链接效果很好,但它看不到 MySQL 插件,这对我来说也是一个谜,我需要它到我的原始项目中。

4

1 回答 1

1

我正在使用 Visual Studio 2013,但昨天我注意到完全相同的缺失链接。

您需要向 Ws2_32.lib 添加依赖项。

如果您的项目编译但由于神秘的“缺少 windows 平台插件”消息而崩溃,您需要将其添加到一个 cpp 中:

Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);

这可能会添加新的依赖项。

仅供参考,这些是我用于默认 Qt 项目的依赖项(有些只需要 ANGLE):

  • winmm.lib
  • ws2_32.lib
  • dxguid.lib
  • d3d9.lib
  • imm32.lib
  • qtmaind.lib
  • Qt5Cored.lib
  • Qt5Guid.lib
  • Qt5Widgetsd.lib
  • libEGLd.lib
  • 库GL
  • ESv2d.lib
  • translate_commond.lib
  • 预处理器.lib
  • 翻译器_hlsld.lib
  • qwindowsd.lib
  • Qt5PlatformSupportd.lib
  • %(附加依赖)
于 2014-03-14T08:16:00.940 回答