установка параметров компоновщика в qt5

Я скомпилировал qt 5.5.1 статически, используя следующие параметры:

configure -static -release -platform win32-msvc2013

и теперь, когда я пытаюсь скомпилировать простую программу hello world, которая не использует никаких библиотек qt (просто приложение на C ++).

Проблема в том, что я не могу настроить параметры компоновщика для программы, чтобы использовать статические библиотеки msvc с помощью флага / MT. Я добавляю это в файл проекта:

CONFIG += static
QMAKE_CFLAGS_RELEASE += -O2 -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CFLAGS_DEBUG += -Zi -MTd

Я получаю следующую ошибку:

msvcprt.lib(locale0_implib.obj):-1: error: LNK2038: mismatch detected for     'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease' in main.obj

а также

:-1: warning: LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library

person Farahats9    schedule 14.02.2016    source источник


Ответы (3)


Если мне не изменяет память, с этой проблемой вы также часто будете сталкиваться при использовании Visual Studio. Поэтому измените конфигурацию сборки, как показано в предупреждающем сообщении, добавьте, пожалуйста, препроцессор NODEFAULTLIB в команду сборки.

person gzh    schedule 14.02.2016
comment
хорошо, я перекомпилировал Qt, и ошибка исчезла, но он все еще компилирует программу как динамически связанную, а не статическую, также попробовал NODEFAULTLIB. - person Farahats9; 17.02.2016

QMAKE_CXXFLAGS_RELEASE += -O2 -MT
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -MT -Zi
QMAKE_CXXFLAGS_DEBUG += -Zi -MTd

также вы можете попробовать

LIBS += -lLIBRARY /NODEFAULTLIB:library
person Vladislav Mikitich    schedule 15.02.2016
comment
Спасибо, я пробовал это, но все еще не компилировал статически связанную программу, это результат компиляции C:\Qt\Qt5.5.1.2\Tools\QtCreator\bin\jom.exe -f Makefile.Release cl -c -nologo -Zc:wchar_t -FS -O2 -MD -Zc:strictStrings -GR -W3 -w34100 -w34189 -w44996 -EHsc -DUNICODE -DWIN32 -DNDEBUG -I..\hello_cpp -I. -IC:\Qt\Qt5.5.1.2\5.5\msvc2013static\qtbase\mkspecs\win32-msvc2013 -Forelease\ @C:\Users\Mohamed\AppData\Local\Temp\main.obj.56044.16.jom main.cpp - person Farahats9; 17.02.2016
comment
вы можете видеть, что он передавал параметр -MD при компиляции, даже когда я добавил -MT в файл .pro, в любом случае я нашел обходной путь и написал его. Спасибо за вашу помощь. - person Farahats9; 17.02.2016

Я понял, что команда clean не удаляла MAKEFILE.RELEASE, поэтому мне пришлось удалить файл вручную, и qmake сгенерировал новый файл с правильным параметром -MT. Спасибо за помощь.

person Farahats9    schedule 16.02.2016