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.
-
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.
@ikarona Can you help me step by step build source Installer Framework ?
-
J JonB referenced this topic on
-
@ikarona Can you help me step by step build source Installer Framework ?
make sure to call
perl init-repository
in QT main repo. Make sure everywhere are similar branches.for QT i build like this
inD:\qt\qt_test_s\qt5\qt5-build
i create script and run it for STATIC QT (to make dynamic build you need to remove flag-static
from configure call.call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86 10.0.17763.0 SET _ROOT=D:\qt\qt_test\qt5\ SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH% SET PATH=%_ROOT%\qtrepotools\bin;%PATH% SET _ROOT= call ..\configure -prefix %CD%\qtbase -static -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
After build is successful I create new script in
D:\qt\qt_test_s\installer-framework
to build installer framework
Make sure installer framework is in correct branch also. You can take a look ininstaller-framework\INSTALL
minimal required version of QT to buildIF
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x86 10.0.17763.0 SET QTDIR=D:\qt\qt_test_s\qt5\qt5-build\qtbase SET QTDIR_LIB=%QTDIR%\lib SET PATH=%QTDIR%\bin;%QTDIR%\..\..\gnuwin32\bin;%QTDIR_LIB%;D:\qt\qt_test_s\installer-framework\lib;%PATH% call qmake.exe && ^ call nmake && ^ call nmake install