Po skompilowaniu programu w wersji Release dostałem błąd jak w temacie na kompie nie zaopatrzonym w Visual C++ Redistributable for Visual Studio 2015.
Wyczytałem, że aby to zmienić, trzeba ustawić RuntimeLibrary tak samo w swoim projekcie i innych bibliotekach z których korzystam. Próbuję na różne sposoby to poustawiać, ale nie idzie mi to zupełnie, dostaję cały czas błąd:
"Podczas kompilowania programu dostaję qtmain.lib(qtmain_win.obj) : error LNK2038: wykryto niezgodność dla elementu „RuntimeLibrary”: wartość „MD_DynamicRelease” jest niezgodna z wartością „MT_StaticRelease” w elemencie DataExtractor.obj"
Ktoś coś poradzi?
Dodam, że w programie korzystam z biblioteki dll, która to korzysta z innej dll-ki plus 3 lib-ów. Do tego Qt. Podpowiedzcie jak się z tym uporać proszę.
powinieneś dystrybuować ten plik razem z twoim plikiem exe lub w instalatorze wymuszać instalacje odpowiedniego redistribute package
Dzięki, to wiem :) Ale chciałbym zalinkować to statystycznie, czytałem że tak się da: https://stackoverflow.com/questions/37216181/missing-mscvp140-dll-and-missing-vcruntime140-dll-when-running-an-exe-file , aczkolwiek u mnie nie działa tak jak bym chciał.
Ale jeśli nie będzie innej opcji, to dorzucę te pliki do folderu z programem po prostu, tak jak piszesz.
@fryderykst: Jaki masz system na tym drugim komputerze?
Z tego co pamiętam, msvcp140.dll jest w net frameworku, a od windows vista wzwyż każdy system ma to zainstalowane.
10 na jednym i drugim
Wesoły Karp napisał(a):
@fryderykst: Jaki masz system na tym drugim komputerze?
Z tego co pamiętam, msvcp140.dll jest w net frameworku, a od windows vista wzwyż każdy system ma to zainstalowane.
ale jesteś świadom, że są różne wersje i każdy ma inne biblioteki?
Jak chcesz linkować statycznie to linkuj, wtedy ten dll będzie zbędny. W czym problem?
Ale z reguły sensowniejszym rozwiązaniem będzie użycie odpowiedniego MSVC redistributable.
Problem w tym, że wybierając dynamiczne linkowanie pojawia się problem z tytułu, a wybierając linkowanie statyczne problem linikera:
"Podczas kompilowania programu dostaję qtmain.lib(qtmain_win.obj) : error LNK2038: wykryto niezgodność dla elementu „RuntimeLibrary”: wartość „MD_DynamicRelease” jest niezgodna z wartością „MT_StaticRelease” w elemencie DataExtractor.obj"
A, Qt nie sposób sensownie linkować statycznie (kilkadziesiąt-kilkaset mb binarki). Linkuj dynamicznie, klientom dawaj linka do odpowiedniego redistributabla.
Jak na razie, do celów testowych po prostu wkleiłem dll do folderu z programem, ale w ostatecznej wersji zrobię pewnie tak jak mówisz, będzie bezpieczniej.
Czyli to na pewno jest problem z Qt? Bo element DataExtractor.obj korzysta z podofo.dll, które też jest linkowane dynamicznie, więc czy tutaj może być problem?
Problem z Qt jest taki, ze gdy go używasz to binarki puchną do niemożliwych rozmiarów (i musisz sam skompilować Qt w odpowiednim trybie). A linkujesz Qt, więc to Cię blokuje. Jeśli nie używasz w projekcie Qt to go nie linkuj.
Nie ma znaczenia czy Qt jest linkowane statycznie czy dynamicznie, tylko czy zlinkowane jest ze statycznym czy dynamicznym runtime'em.
Używam Qt, inaczej bym go nie linkował :) Dzięki za porady.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.