Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2012, 19:19   #1
alsav22
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 32
По умолчанию Ошибка при построении Release в VC 2010 Express.

Использую 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 выставить Консоль или Не задано, тогда ошибок нет, но при запуске приложения открывается окно консоли, которое мне совершенно не нужно.
Как можно сделать, чтобы и ошибок не было и консоль не открывалась?
alsav22 вне форума Ответить с цитированием
Старый 27.04.2012, 01:09   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,120
По умолчанию

alsav22

Причину нашёл. Ошибка появляется, если в Свойстах проекта, Все конфигурации, Компоновщик, Система, Подсистема прописана Windows

Это здесь ни при чём. Более того, настройка правильная, и менять её не следует, в чём ты уже сам/а/о убедился/лась/лось

1>qtmaind.lib(qtmain_win.obj)

у тебя в релизе подключается отладочная библиотека
Rififi вне форума Ответить с цитированием
Старый 27.04.2012, 22:35   #3
alsav22
Пользователь
 
Регистрация: 09.02.2012
Сообщений: 32
По умолчанию

Решение такое. Подключить заголовочный файл
Код:
#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);
alsav22 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Release компиляция [VS 2010 C# + XNA 4.0] MooNDeaR Gamedev - cоздание игр: Unity, OpenGL, DirectX 3 26.01.2012 23:44
ошибка при установке Microsoft Office 2010 Professional Plus 2010 VL [Оригинальный образ Microsoft] syperman96 Microsoft Office Word 2 12.02.2011 12:50
Ошибка при построении в visual c++ ghost1st Visual C++ 2 13.02.2010 22:55
MS Visual Studio. ошибка при построении Backfire Софт 0 11.10.2009 18:19