【发布时间】:2014-03-12 15:03:36
【问题描述】:
几天来,我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本。 我就是想不通我做错了什么。
系统:
- Windows 7 64 位
- Visual Studio 2013(仍安装 Visual Studio 2012)
- Perl 已安装 (ActivePerl-5.18.2.1801-MSWin32-x64-297964.msi)
- Python 已安装 (python-2.7.6.amd64.msi)
- Direct X 10 SDK 已安装(DXSDK_Jun10.exe 我不得不使用这个workaround)
- 已下载Qt 5.2.1
- 已下载Qt 5.3.0 alpha
我多次做了什么:
- 在临时文件夹 (C:\QtSrc) 中提取源代码
- 删除 qtwebkit 和 qtwebkit-examples 目录
对于每个文件夹,我启动了一个 Visual Studio x86 命令行并运行:
- cd C:\QtSrc
- 配置 -c++11 -mp -debug-and-release -static -angle -nomake 测试 -nomake 示例 -prefix C:\Qt\5.2.1\msvc2013 -platform win32-msvc2013
- nmake
- nmake 安装
对于我尝试过的 -static 与 -shared 或 Qt 5.2.1 与 Qt 5.3.0 alpha 的每种变体,这总是成功的。
在 Qt Creator 中
我可以使用共享的 Qt 库注册各种工具包、编译和启动任何示例。另一方面,使用静态 Qt 库的示例从未编译过。 错误总是如下所示:LNK1104: cannot open file 'C:/Qt/5.3.0/msvc2013-static/lib/translator_common.lib'。 问题是文件丢失(调试模式下的translator_commond.lib或发布模式下的translator_common.lib)
在 Visual Studio 2013 中(使用 Visual Studio Addin 1.2.3 alpha)
我可以添加 Qt 版本并更改我的解决方案的 Qt 版本。 如果可以使用共享版本的 Qt 编译和运行像这样一个非常简单的程序:
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);
int main(int argc,char*argv[]){
QApplication app(argc,argv);
QMessageBox::critical(nullptr,"Hello","Hello Qt!");
return 0;}
使用静态版 Qt 时出现未解决的外部链接器错误:
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShInitialize referenced in function "private: void __thiscall gl::Shader::initializeCompiler(void)" (?initializeCompiler@Shader@gl@@AAEXXZ)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShFinalize referenced in function "public: static void __cdecl gl::Shader::releaseCompiler(void)" (?releaseCompiler@Shader@gl@@SAXXZ)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShInitBuiltInResources referenced in function "private: void __thiscall gl::Shader::initializeCompiler(void)" (?initializeCompiler@Shader@gl@@AAEXXZ)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShConstructCompiler referenced in function "private: void __thiscall gl::Shader::initializeCompiler(void)" (?initializeCompiler@Shader@gl@@AAEXXZ)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShDestruct referenced in function "public: static void __cdecl gl::Shader::releaseCompiler(void)" (?releaseCompiler@Shader@gl@@SAXXZ)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShCompile referenced in function "protected: void __thiscall gl::Shader::compileToHLSL(void *)" (?compileToHLSL@Shader@gl@@IAEXPAX@Z)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShGetInfo referenced in function "protected: void __thiscall gl::Shader::compileToHLSL(void *)" (?compileToHLSL@Shader@gl@@IAEXPAX@Z)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShGetInfoLog referenced in function "protected: void __thiscall gl::Shader::compileToHLSL(void *)" (?compileToHLSL@Shader@gl@@IAEXPAX@Z)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShGetObjectCode referenced in function "protected: void __thiscall gl::Shader::compileToHLSL(void *)" (?compileToHLSL@Shader@gl@@IAEXPAX@Z)
1>libGLESv2d.lib(Shader.obj) : error LNK2019: unresolved external symbol _ShGetInfoPointer referenced in function "protected: void __thiscall gl::Shader::compileToHLSL(void *)" (?compileToHLSL@Shader@gl@@IAEXPAX@Z)
尽管我付出了所有努力,但我还是找不到要包含哪个库来解决那些丢失的符号。
你知道我做错了什么吗?
【问题讨论】:
-
由于这是一个以英语为主的网站,我建议翻译错误消息。话虽如此,我相信错误是说它无法解析函数 __thiscall 中的外部引用,对吗?
-
我翻译了错误信息。您对 Visual Studio 非常正确,我需要链接到某个库,但我找不到哪个库。
-
我对此了解不多,但看起来它缺少 OpenGL 实现。也许尝试与这样的东西联系? code.google.com/p/angleproject
-
@DarkFalcon 感谢您的帮助!但这就是配置中 -angle 选项的用途。但是,您提供的链接指出需要 Directx11(这是我计算机上安装的版本),但我只有 Direct x10 的 SDK。我将在 Windows 8 上尝试 Directx10 的安装不会强制卸载某些组件。
标签: c++ visual-studio qt static-libraries qt5