Unresolved external symbol while building Installer Framework
-
Hi!
Currently I'm trying to build sources of IF with dynamically linked QT.
OS: win 10
QT - branches ifw-5.15.2, 5.15.6-lts-lgpl,... (tried different)
IF - branch 4.3
compiler: msvc, tried compilers from different Visual Studios: 2015, 2017, 2019Example for VS 2015. Same tried for other studios.
That's how I build dynamic QT
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 10.0.17763.0 SET _ROOT=D:\tfgit\qt\qt_test3\qt5 SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% SET PATH=%_ROOT%\qtrepotools\bin;%PATH% SET _ROOT= call ..\configure -prefix %CD%\qtbase -opensource -confirm-license -platform win32-msvc2017 -release ^ -nomake examples -nomake tests -skip qtwebengine -no-openssl -opengl desktop && -developer-build ^ call nmake module-qtbase module-qtdeclarative module-qttools module-qttranslations module-qtwinextras && ^ call nmake install
This build finishes successfully all the times.
This is how I'm trying to build IF:
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 10.0.17763.0 SET QTDIR=D:\tfgit\qt\qt_test2\qt_test\qt5\qt5_build\qtbase SET QTDIR_LIB=%QTDIR%\lib SET PATH=%QTDIR%\bin;%QTDIR%\..\..\gnuwin32\bin;%QTDIR_LIB%;D:\tfgit\qt\qt_test2\installer-framework\lib;%PATH% call qmake.exe "LIBS+= -LD:\tfgit\qt\qt_test2\qt_test\qt5\qt5_build\qtbase\lib -LD:\tfgit\qt\qt_test2\qt_test\qt5\qt5_build\qtbase\bin -LD:\tfgit\qt\qt_test2\installer-framework\lib" && ^ call nmake && ^ call nmake install
This line also tried different options. This is last try, that's why it looks like this:
call qmake.exe "LIBS+= -LD:\tfgit\qt\qt_test2\qt_test\qt5\qt5_build\qtbase\lib -LD:\tfgit\qt\qt_test2\qt_test\qt5\qt5_build\qtbase\bin -LD:\tfgit\qt\qt_test2\installer-framework\lib" && ^
Errors I'm getting are:
Linker errors when building the installer:- Unresolved RunOnceChecker symbols:
- RunOnceChecker constructor and destructor
- RunOnceChecker::isRunning()
- Missing QInstaller symbols:
- QInstaller::init()
- GenericFactoryQInstaller::PackageManagerPage
- QInstaller::PackageManagerPageFactory::instance()
- Missing QWinTaskbarButton and QWinTaskbarProgress symbols:
- Constructors, destructors, and methods
- Missing Windows API functions:
- SHGetFolderPathW
- Security functions (AllocateAndInitializeSid, etc.)
- COM functions (CoInitialize, CoUninitialize)
- Shell functions (ShellExecuteExW)
- Privilege functions (AdjustTokenPrivileges, etc.)
- Other Windows APIs (SysAllocString, VariantClear, etc.)
Total: 38 unresolved external symbols
error LNK2001: unresolved external symbol "RunOnceChecker::RunOnceChecker(const QString&)" (__imp_...) error LNK2001: unresolved external symbol "RunOnceChecker::~RunOnceChecker(void)" (__imp_...) error LNK2019/LNK2001: unresolved external symbol "bool RunOnceChecker::isRunning(QFlags<RunOnceChecker::ConditionFlag>)" (__imp_...) main.obj: error LNK2019: unresolved external symbol "RunOnceChecker::~RunOnceChecker(void)" (__imp_...) referenced in SDKApp destructor [QWinTaskbarButton & QWinTaskbarProgress] installer.lib (packagemanagergui.obj, performinstallationform.obj): error LNK2001/LNK2019: unresolved external symbol "QWinTaskbarButton::QWinTaskbarButton(QObject*)" (__imp_...) error LNK2001/LNK2019: unresolved external symbol "virtual QWinTaskbarButton::~QWinTaskbarButton(void)" (__imp_...) error LNK2019: unresolved external symbol "void QWinTaskbarButton::setWindow(QWindow*)" (__imp_...) error LNK2001/LNK2019: unresolved external symbol "QWindow* QWinTaskbarButton::window(void)const" (__imp_...) error LNK2001/LNK2019: unresolved external symbol "QWinTaskbarProgress* QWinTaskbarButton::progress(void)const" (__imp_...) error LNK2001/LNK2019: unresolved external symbol "void QWinTaskbarProgress::setValue(int)" (__imp_...) error LNK2019: unresolved external symbol "void QWinTaskbarProgress::reset(void)" (__imp_...) error LNK2019: unresolved external symbol "void QWinTaskbarProgress::setVisible(bool)" (__imp_...) error LNK2019: unresolved external symbol "void QWinTaskbarProgress::resume(void)" (__imp_...) error LNK2019: unresolved external symbol "void QWinTaskbarProgress::stop(void)" (__imp_...) error LNK2001: unresolved external symbol virtual ?????? QWinTaskbarButton (eventFilter, metaObject, qt_metacall, qt_metacast) [Windows API ? COM] installer.lib (packagemanagercoredata.obj): error LNK2019: unresolved external symbol "SHGetFolderPathW" (__imp_SHGetFolderPathW) installer.lib (adminauthorization_win.obj): error LNK2019: unresolved external symbols "AllocateAndInitializeSid", "CheckTokenMembership", "FreeSid", "ShellExecuteExW", "CoInitialize", "CoUninitialize" (__imp_...) installer.lib (utils.obj): error LNK2019: unresolved external symbols "OpenProcessToken", "AdjustTokenPrivileges", "PrivilegeCheck", "LookupPrivilegeValueW" (__imp_...) 7z.lib (ArchiveExtractCallback.obj, PropVariant.obj, EnumDirItems.obj, 7zHandlerOut.obj): error LNK2001/LNK2019: unresolved external symbols "OpenProcessToken", "AdjustTokenPrivileges", "SysAllocString", "SysAllocStringLen", "VariantClear", "VariantCopy", "SysFreeString", "GetFileSecurityW", "SetFileSecurityW" (__imp_...) ..\..\bin\installerbase.exe : fatal error LNK1120: 38 unresolved externals
-
Seems like due to this bugs discussions(specifically messages from Katja Marttila)
https://bugreports.qt.io/browse/QTIFW-3180
https://bugreports.qt.io/browse/QTIFW-2611It's required to build QT statically for installer despite the fact that it's recommendation in instruction.