c++ - QT 5.6 静态未解析的外部符号

标签 c++ qt

我正在开发一个使用 QWidget 并静态链接 Qt 5.6 的小型应用程序。我现在正在使用 VS12。

#include <QMainWindow>
#include <QApplication>

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  QMainWindow w;
  w.show();

  return a.exec();
}

编译正常,但出现链接器错误。

1>libGLESv2d.lib(global_state.obj) : error LNK2019: unresolved external symbol "unsigned long __cdecl CreateTLSIndex(void)" (?CreateTLSIndex@@YAKXZ) referenced in function "struct A0x6526a104::Current * __cdecl `anonymous namespace'::GetCurrentData(void)" (?GetCurrentData@?A0x6526a104@@YAPAUCurrent@1@XZ)
1>libGLESv2d.lib(global_state.obj) : error LNK2019: unresolved external symbol "bool __cdecl DestroyTLSIndex(unsigned long)" (?DestroyTLSIndex@@YA_NK@Z) referenced in function _DllMain_ANGLE@12
1>libGLESv2d.lib(global_state.obj) : error LNK2019: unresolved external symbol "bool __cdecl SetTLSValue(unsigned long,void *)" (?SetTLSValue@@YA_NKPAX@Z) referenced in function "struct A0x6526a104::Current * __cdecl `anonymous namespace'::AllocateCurrent(void)" (?AllocateCurrent@?A0x6526a104@@YAPAUCurrent@1@XZ)
1>libGLESv2d.lib(global_state.obj) : error LNK2019: unresolved external symbol "void * __cdecl GetTLSValue(unsigned long)" (?GetTLSValue@@YAPAXK@Z) referenced in function "void __cdecl `anonymous namespace'::DeallocateCurrent(void)" (?DeallocateCurrent@?A0x6526a104@@YAXXZ)
1>libGLESv2d.lib(Program.obj) : error LNK2019: unresolved external symbol "bool __cdecl sh::InterpolationTypesMatch(enum sh::InterpolationType,enum sh::InterpolationType)" (?InterpolationTypesMatch@sh@@YA_NW4InterpolationType@1@0@Z) referenced in function "private: static bool __cdecl gl::Program::linkValidateVaryings(class gl::InfoLog &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,struct sh::Varying const &,struct sh::Varying const &)" (?linkValidateVaryings@Program@gl@@CA_NAAVInfoLog@2@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABUVarying@sh@@2@Z)
1>libGLESv2d.lib(Program.obj) : error LNK2019: unresolved external symbol "public: struct sh::ShaderVariable & __thiscall sh::ShaderVariable::operator=(struct sh::ShaderVariable const &)" (??4ShaderVariable@sh@@QAEAAU01@ABU01@@Z) referenced in function "private: bool __thiscall gl::Program::linkAttributes(class gl::InfoLog &,class gl::AttributeBindings const &,class gl::Shader const *)" (?linkAttributes@Program@gl@@AAE_NAAVInfoLog@2@ABVAttributeBindings@2@PBVShader@2@@Z)
1>libGLESv2d.lib(Program.obj) : error LNK2019: unresolved external symbol "public: __thiscall sh::Attribute::Attribute(void)" (??0Attribute@sh@@QAE@XZ) referenced in function "public: __thiscall gl::Program::Program(class rx::ProgramImpl *,class gl::ResourceManager *,unsigned int)" (??0Program@gl@@QAE@PAVProgramImpl@rx@@PAVResourceManager@1@I@Z)
1>libGLESv2d.lib(Program.obj) : error LNK2019: unresolved external symbol "public: __thiscall sh::Attribute::~Attribute(void)" (??1Attribute@sh@@QAE@XZ) referenced in function "public: __thiscall gl::Program::Program(class rx::ProgramImpl *,class gl::ResourceManager *,unsigned int)" (??0Program@gl@@QAE@PAVProgramImpl@rx@@PAVResourceManager@1@I@Z)
1>libGLESv2d.lib(ProgramImpl.obj) : error LNK2001: unresolved external symbol "public: __thiscall sh::Attribute::~Attribute(void)" (??1Attribute@sh@@QAE@XZ)
1>libGLESv2d.lib(Program.obj) : error LNK2019: unresolved external symbol "public: struct sh::Attribute & __thiscall sh::Attribute::operator=(struct sh::Attribute const &)" (??4Attribute@sh@@QAEAAU01@ABU01@@Z) referenced in function "void __cdecl std::_Fill<struct sh::Attribute *,struct sh::Attribute>(struct sh::Attribute *,struct sh::Attribute *,struct sh::Attribute const &)" (??$_Fill@PAUAttribute@sh@@U12@@std@@YAXPAUAttribute@sh@@0ABU12@@Z)

我包含了以下库:

winmm.lib
imm32.lib
Ws2_32.lib
opengl32.lib
Qt5Guid.lib
Qt5Widgetsd.lib
qtpcred.lib
qtharfbuzzngd.lib
Qt5PlatformSupportd.lib
qwindowsd.lib
libEGLd.lib
libGLESv2d.lib
qtfreetyped.lib
Qt5Cored.lib

有趣的是,如果使用 QtCreator,它可以很好地编译、链接和运行。 我看到的是 QtCreator 添加了以下编译标志:

-DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_OPENGL_ES_2 -DQT_OPENGL_ES_2_ANGLE -DQT_OPENGL_ES_2_ANGLE_STATIC -DGL_APICALL= -DEGLAPI=

我在我的项目中尝试过它们,但它没有改变任何东西。 我错过了什么?制作程序链接需要什么?

最佳答案

我找到了。这是使其工作所需的库列表:

winmm.lib
imm32.lib
Ws2_32.lib
Qt5Guid.lib
Qt5Widgetsd.lib
qtpcred.lib
qtharfbuzzngd.lib
Qt5PlatformSupportd.lib
qwindowsd.lib
libEGLd.lib
libGLESv2d.lib
qtfreetyped.lib
Qt5Cored.lib
+ preprocessord.lib
+ translatord.lib
+ d3d9.lib
+ dxguid.lib

不需要opengl32.lib。 我仍然不知道为什么 QtCreator 知道需要什么库而 VS2013 却不知道。 感谢您的帮助。

关于c++ - QT 5.6 静态未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38714664/

相关文章:

c++ - bool 标志应该始终是原子的吗?

c++ - 用于全局内存的 Qt Linux 文件映射

c++ - 如何使用 QString 数组调用 QMetaMethod?

qt - 如何隐藏/删除 Qt 对话框 "?"上的 "title bar"帮助按钮?

c++ - 编写平台特定代码的最佳(最干净)方式

c++ - std::map<> 的自定义键

c++ - Makefile 模式规则无法匹配

c++ - 在重叠处划分轮廓

c++ - 实现多线程环境

qt - 如何在 Qtdesigner 中创建 .ui 文件的头文件和源文件?