Windows build instructions
-
I'm following the Strawberry MSVC build instructions for Windows to add a new feature, but encounter some issues:
- I've completed steps
Requirements
...Alternative 1
. - The following step is unclear:
Add the following extra CMake arguments: For debug: -DARCH=x86_64 -DICU_ROOT=c:\\strawberry_msvc_x86_64_debug For release: -DARCH=x86_64 -DICU_ROOT=c:\\strawberry_msvc_x86_64_release
I've interpreted this as:
Ctrl+Shift+P
Type:CMake Settings
Assumming the following setting should be updated:Is this correct for release build as there are two
command arguments
as shown in the screenshot?When building
strawberry.exe
, it results in build errors:Severity Code Description Project File Line Suppression State Details Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\organizedialog.cpp.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) public: static void __cdecl icu_75::UMemory::operator delete(void *)" (__imp_??3UMemory@icu_75@@SAXPEAX@Z) referenced in function "public: virtual void * __cdecl icu_75::StringByteSink<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::`scalar deleting destructor'(unsigned int)" (??_G?$StringByteSink@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@icu_75@@UEAAPEAXI@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) public: __cdecl icu_75::ByteSink::ByteSink(void)" (__imp_??0ByteSink@icu_75@@QEAA@XZ) referenced in function "public: __cdecl icu_75::StringByteSink<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::StringByteSink<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,int)" (??0?$StringByteSink@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@icu_75@@QEAA@PEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) public: virtual __cdecl icu_75::ByteSink::~ByteSink(void)" (__imp_??1ByteSink@icu_75@@UEAA@XZ) referenced in function "int `public: __cdecl icu_75::StringByteSink<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >::StringByteSink<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,int)'::`1'::dtor$0" (?dtor$0@?0???0?$StringByteSink@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@icu_75@@QEAA@PEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z@4HA) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) public: void __cdecl icu_75::UnicodeString::toUTF8(class icu_75::ByteSink &)const " (__imp_?toUTF8@UnicodeString@icu_75@@QEBAXAEAVByteSink@2@@Z) referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __cdecl icu_75::UnicodeString::toUTF8String<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)const " (??$toUTF8String@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@UnicodeString@icu_75@@QEBAAEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAV23@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) public: int __cdecl icu_75::UnicodeString::length(void)const " (__imp_?length@UnicodeString@icu_75@@QEBAHXZ) referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > & __cdecl icu_75::UnicodeString::toUTF8String<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)const " (??$toUTF8String@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@UnicodeString@icu_75@@QEBAAEAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEAV23@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) public: __cdecl icu_75::UnicodeString::UnicodeString(char const *)" (__imp_??0UnicodeString@icu_75@@QEAA@PEBD@Z) referenced in function "class QString __cdecl Utilities::Transliterate(class QString const &)" (?Transliterate@Utilities@@YA?AVQString@@AEBV2@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) public: virtual __cdecl icu_75::UnicodeString::~UnicodeString(void)" (__imp_??1UnicodeString@icu_75@@UEAA@XZ) referenced in function "class QString __cdecl Utilities::Transliterate(class QString const &)" (?Transliterate@Utilities@@YA?AVQString@@AEBV2@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) public: static class icu_75::Transliterator * __cdecl icu_75::Transliterator::createInstance(class icu_75::UnicodeString const &,enum UTransDirection,enum UErrorCode &)" (__imp_?createInstance@Transliterator@icu_75@@SAPEAV12@AEBVUnicodeString@2@W4UTransDirection@@AEAW4UErrorCode@@@Z) referenced in function "class QString __cdecl Utilities::Transliterate(class QString const &)" (?Transliterate@Utilities@@YA?AVQString@@AEBV2@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2001 unresolved external symbol "public: virtual char * __cdecl icu_75::ByteSink::GetAppendBuffer(int,int,char *,int,int *)" (?GetAppendBuffer@ByteSink@icu_75@@UEAAPEADHHPEADHPEAH@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2001 unresolved external symbol "public: virtual void __cdecl icu_75::ByteSink::Flush(void)" (?Flush@ByteSink@icu_75@@UEAAXXZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\transliterate.cpp.obj 1 Error LNK2019 unresolved external symbol ucsdet_open_75 referenced in function "class QByteArray __cdecl Utilities::TextEncodingFromData(class QByteArray const &)" (?TextEncodingFromData@Utilities@@YA?AVQByteArray@@AEBV2@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\textencodingutils.cpp.obj 1 Error LNK2019 unresolved external symbol ucsdet_close_75 referenced in function "public: __cdecl `class QByteArray __cdecl Utilities::TextEncodingFromData(class QByteArray const &)'::`2'::<lambda_1>::operator()(void)const " (??R<lambda_1>@?1??TextEncodingFromData@Utilities@@YA?AVQByteArray@@AEBV3@@Z@QEBA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\textencodingutils.cpp.obj 1 Error LNK2019 unresolved external symbol ucsdet_setText_75 referenced in function "class QByteArray __cdecl Utilities::TextEncodingFromData(class QByteArray const &)" (?TextEncodingFromData@Utilities@@YA?AVQByteArray@@AEBV2@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\textencodingutils.cpp.obj 1 Error LNK2019 unresolved external symbol ucsdet_detect_75 referenced in function "class QByteArray __cdecl Utilities::TextEncodingFromData(class QByteArray const &)" (?TextEncodingFromData@Utilities@@YA?AVQByteArray@@AEBV2@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\textencodingutils.cpp.obj 1 Error LNK2019 unresolved external symbol ucsdet_getName_75 referenced in function "class QByteArray __cdecl Utilities::TextEncodingFromData(class QByteArray const &)" (?TextEncodingFromData@Utilities@@YA?AVQByteArray@@AEBV2@@Z) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\textencodingutils.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\moodbaritemdelegate.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\albumcoverchoicecontroller.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\edittagdialog.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\tagfetcher.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\playlistdelegates.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\playlistmanager.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\playlistgeneratorinserter.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\smartplaylistsearchpreview.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\gstengine.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\gstenginepipeline.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\collectionmodel.cpp.obj 1 Error LNK2001 unresolved external symbol "__declspec(dllimport) public: __cdecl QtPrivate::ResultIteratorBase::~ResultIteratorBase(void)" (__imp_??1ResultIteratorBase@QtPrivate@@QEAA@XZ) C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\playlist.cpp.obj 1 Error LNK1120 16 unresolved externals C:\straberrymusicplayer\out\build\x64-Debug\straberrymusicplayer C:\straberrymusicplayer\out\build\x64-Debug\strawberry.exe 1
- In step
Copy dependencies (MSYS2 Shell)
I'm lost:
Run the "copy-deps-msvc-x64-debug-qt6.bat" or "copy-deps-msvc-x64-release-qt6.bat" batch file first to copy all plugins to the build directory.
Where is are these
.bat
files located? - I've completed steps
-
These are linking errors, not build errors. The icu related linking errors are most likely caused by having conflicting ICU versions installed.
You need to check the logs to see where it's picked up, or you could build with/VERBOSE
.
You should be able to fix it by removing the conflicting ICU version.
There could also be icu libraries inC:\Program Files (x86)\Windows Kits
, if it's still picking up ICU from there you can search for*icu*lib
and*icu*h
and rename those files, although I do no have to do that.
The second linking errors could be caused by having conflicting Qt versions installed. -
@jonas Thanks for your quick reply.
Instead of installing all tools manually, I've now executed the batch files on a clean Windows 11 and configured the environment variables as described:
- Run download.bat (Windows Terminal)
- Run install.bat (Windows Terminal as administrator. It requires some manual installations like Visual Studio 2022)
- Run build.bat (Run in Visual Studio 2022 x86_x64 Native Tools Command Prompt; It builds all dependencies and sources which takes hours, still running...)
I had no success by extracting binary dependencies to
C:\strawberry_msvc_x86_64_debug
as it results in unsatisfied requirement errors.I assume this is the right way of building?
Note: There is a bug in download.bat which should be changed to:
-https://7-zip.org/a/7z2201-x64.exe +https://7-zip.org/a/7z%7ZIP_VERSION%-x64.exe
as
version.bat
contains@set 7ZIP_VERSION=2301
which now results in a download/install filename mismatch. -
I found the root cause as I was accidentally mixing debug and release builds.
Unfortunately, the Windows MSVC build is currently broken with outdated instructions. I've applied multiple fixes manually and now builds successfully. I'll create pull-requests for each item.
-
Resolved, Windows build instructions for developers is updated in strawberrymusicplayer/strawberry-msvc.