Russian Qt Forum
Ноябрь 24, 2024, 19:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка при построении Release в VC 2010 Express.  (Прочитано 3998 раз)
alsav22
Гость
« : Апрель 24, 2012, 18:44 »

Использую qt-win-opensource-4.8.1-vs2010 с VC 2010 Express. Проект разделён на три файла:

mainwindow.h
Код:
#include <QtGui>
#include <QtCore>
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
};

mainwindow.cpp
Код:
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    QLabel* label=new QLabel(this);

label->setText("Здравствуй, Мир!");
label->setAlignment(Qt::AlignCenter);
setCentralWidget(label);
}

main.cpp
Код:
#include "mainwindow.h"
int main(int argc, char **argv)
 {
QApplication app(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));
MainWindow w;
w.resize(600,350);

QPushButton cmd("ADD");
cmd.show();
w.show();

QObject::connect(&cmd, SIGNAL(clicked()), &app, SLOT(quit()));

return app.exec();
 }

После первого построения (с ошибками), в файлы исходного кода добавляется: moc_mainwindow.h.cpp, который создаётся moc , для чего  в Свойста проекта, Все конфигурации,  События постороения, Событие перед постороением,  Командная строка, добавленно:
Код:
moc -o moc_mainwindow.h.cpp mainwindow.h

Построение Debug нормально проходит. Если Release, то:
Код:
1>------ Построение начато: проект: Qt5, Конфигурация: Release Win32 ------
1>  mainwindow.cpp
1>  moc_mainwindow.h.cpp
1>qtmaind.lib(qtmain_win.obj) : error LNK2038: обнаружено несоответствие для "_ITERATOR_DEBUG_LEVEL": значение "2" не соответствует значению "0" в main.obj
1>MSVCRT.lib(cinitexe.obj) : warning LNK4098: библиотека по умолчанию "msvcrtd.lib" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library
1>D:\MY C++Projects\Qt5\Release\Qt5.exe : fatal error LNK1319: обнаружено несоответствий: 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Если для Release в Свойствах проекта, Компоновка, Ввод, Игнорировать все стандартные библиотеки - прописать: msvcrtd.lib, то:
Код:
1>------ Построение начато: проект: Qt5, Конфигурация: Release Win32 ------
1>  moc_mainwindow.h.cpp
1>qtmaind.lib(qtmain_win.obj) : error LNK2038: обнаружено несоответствие для "_ITERATOR_DEBUG_LEVEL": значение "2" не соответствует значению "0" в main.obj
1>D:\MY C++Projects\Qt5\Release\Qt5.exe : fatal error LNK1319: обнаружено несоответствий: 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Что можно сделать?
Причину нашёл.  Ошибка появляется, если  в Свойстах проекта, Все конфигурации, Компоновщик, Система, Подсистема прописана Windows. На  Debug это никак не отражается, а при Release появляются описанные выше ошибки. Если для Release выставить Консоль или Не задано, тогда ошибок нет, но при запуске приложения открывается окно консоли, которое мне совершенно не нужно.
  Как это можно разрулить?









« Последнее редактирование: Апрель 24, 2012, 21:34 от alsav22 » Записан
alsav22
Гость
« Ответ #1 : Апрель 27, 2012, 21:28 »

Решение. Подключить заголовочный файл #include <Windows.h>  .
Вместо
Код:
int main(int argc, char **argv)
написать:
Код:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpcmdline, int ncmdshow)
. Вместо
Код:
QApplication app(argc, argv);
написать: 
Код:
QApplication app(ncmdshow, (char **)lpcmdline);
.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 20.