Qt 5.4 static build produces “unresolved external symbol” link error in Visual Studio 2013

匆匆过客 提交于 2019-11-30 17:44:38

问题


I want to use a static build of Qt 5.4. Since there is no precompiled static build available, you have to build one from the Qt source code yourself.

My environment is the following:

  • Windows 7 x64
  • Visual Studio 2013 Ultimate Update 4
  • Qt5 Visual Studio Add-in 1.2.4
  • ActivePerl / ActivePython installed (required to build Qt source)

My procedure was the following (cf. Qt Documentation > Qt 5.4 > Qt for Windows - Building from Source):

  • Download qt-everywhere-opensource-src-5.4.0.zip
  • Extract to a temp folder
  • Open a command prompt as described here (basically, this is similar to open a "Visual Studio Command Prompt" and adding some paths to the path variable)
  • Run configure with the following command

    configure -c++11 -mp -release -static -nomake tests -nomake examples -prefix D:\Qt\qt-5.4.0-x86-msvc2013-compact-static -platform win32-msvc2013 -opengl desktop -no-icu -skip webkit
    
  • Run nmake and nmake install

All this run through without errors.

Then in Visual Studio, I changed the Qt version of an existing Qt project to D:\Qt\qt-5.4.0-x86-msvc2013-compact-static as this was the output folder of the above procedure.

However, now I get tons of unresolved symbol errors of the following kind (build configuration "release"):

error LNK2001: unresolved external symbol "__imp__glBindTexture@8". Qt5Gui.lib(qopenglfunctions.obj)
...
error LNK2001: unresolved external symbol "_hb_blob_create".    Qt5Gui.lib(qharfbuzzng.obj)
...
error LNK2001: unresolved external symbol "_hb_face_create_for_tables". Qt5Gui.lib(qharfbuzzng.obj)
....
error LNK2001: unresolved external symbol "_WSAAsyncSelect@16". Qt5Core.lib(qeventdispatcher_win.obj)

A shared library / dynamic linking build with similar options (-platform win32-msvc2013 -opengl desktop -no-icu -skip webkit) works just fine.

What am I doing wrong?


Update Jan 6th:

1) As already mentioned in the comments, this may be a bug in Qt, so I created a bug report (QTBUG-43636), and later I found a probably related bug (QTBUG-38913). (Sorry, I can post no more than 2 links)

2) I found out (thanks to karlphillip) that you can reduce the number of error messages if you add some libraries to your additional dependencies in Visual Studio

  • Ws2_32.lib resolves one error message (out of 103)
  • opengl32.lib resolves 47 error messages

This means there are now "only" 55 error messages left. Maybe there are still more libraries missing?


回答1:


I found the solution:

You have to add the following libraries to your additional dependencies in Visual Studio:

Ws2_32.lib opengl32.lib qtharfbuzzng.lib

Then, my project finally compiled.

However, that is not the end of the story:

Although successfully compiled, my application showed the following error message on startup:

This application failed to start because it could not find or load the Qt platform plugin "windows".

To solve this, you have to add even more libraries to your additional dependencies:

imm32.lib winmm.lib Qt5PlatformSupport.lib qwindows.lib

...and the following to your additional library directories:

$(QTDIR)\plugins\platforms

...and the following to your source code:

#include <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)

Done! Finally, I was able to link against static Qt libraries.

It was worth the effort:

The cold startup time of my application improved dramatically from about 10 seconds to less than 1 second. And instead of 14 MB DLL-files I only have to deploy a single 8 MB EXE-file.



来源:https://stackoverflow.com/questions/27759754/qt-5-4-static-build-produces-unresolved-external-symbol-link-error-in-visual-s

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!