Ошибка При Построении Release В Vc 2010 Express.

Тема в разделе "MS Visual C++", создана пользователем alsav22, 26 апр 2012.

  1. alsav22

    alsav22 New Member

    Регистрация:
    13 апр 2012
    Сообщения:
    2
    Симпатии:
    0
    Использую qt-win-opensource-4.8.1-vs2010 с VC 2010 Express. Проект разделён на три файла:
    mainwindow.h
    Код (C++):
    #include <QtGui>
    #include <QtCore>
    class MainWindow : public QMainWindow
    {
    Q_OBJECT
    public:
    explicit MainWindow(QWidget *parent = 0);
    };
    mainwindow.cpp
    Код (C++):
    #include "mainwindow.h"
    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
    {
    QLabel* label=new QLabel(this);

    label->setText("Здравствуй, Мир!");
    label->setAlignment(Qt::AlignCenter);
    setCentralWidget(label);
    }
    Код (C++):
    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 , для чего в Свойста проекта, Все конфигурации, События постороения, Событие перед постороением, Командная строка, добавленно:
    Код (C++):
    moc -o moc_mainwindow.h.cpp mainwindow.h
    Построение Debug нормально проходит. Если Release, то:
    Код (C++):
    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, то:
    Код (C++):
    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 выставить Консоль или Не задано, тогда ошибок нет, но при запуске приложения открывается окно консоли, которое мне совершенно не нужно.
    Как можно сделать, чтобы и ошибок не было и консоль не открывалась?
     
  2. alsav22

    alsav22 New Member

    Регистрация:
    13 апр 2012
    Сообщения:
    2
    Симпатии:
    0
    Решение такое. Подключить заголовочный файл
    Код (C++):
    #include <Windows.h>
    .
    Вместо
    Код (C++):
    int main(int argc, char **argv)
    написать:
    Код (C++):
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpcmdline, int ncmdshow)
    . Вместо
    Код (C++):
    QApplication app(argc, argv);
    написать:
    Код (C++):
    QApplication app(ncmdshow, (char **)lpcmdline);
    .
     
  3. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Странное решение, вы теряете переносимость кода.
    Однако, я под студией QT проекты не собирал, поэтому ничего не смог посоветовать )

    Не скажете зачем вы студию используете? Есть ведь QTCreator...
     
  4. alsav22

    alsav22 New Member

    Регистрация:
    13 апр 2012
    Сообщения:
    2
    Симпатии:
    0
    Я только учусь. К VS привык, вот и решил совместить. А в QTCreator у меня всякие мелкие проблемы. Например, почему-то не создаётся релиз, хотя при создании проекта заказывется.
    Есть ещё вариант совместить VS и Qt. На VS Ultimate поставить аддон qt-vs-addin. Тогда в VS можно будет создавать проекты Qt.
    Насчёт переносимости(хотя, мне рано ещё об этом). Наверное, для этого конктетного случая, можно точку входа при переносе вручную переписывать, или как-то организовать перезапись через #define ?

    Сейчас через #define попробовал. Получается. Если нужно увидеть отладочную информацию, то можно как консольное запустить. Если не нужно - то, как оконное.
     
  5. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Программы на QT обычно без проблем работают как минимум под win и Lin.
    Путь к проекту к Creator должен содержать только английские символы(ну и пробелы я бы убрал на всякий пожарный).
    не понял. Что имеется ввиду под отладочной информацией?
    то что выводится в qDebug() в креаторе можно увидеть всегда, там для этого специальная вкладка есть.
     
  6. alsav22

    alsav22 New Member

    Регистрация:
    13 апр 2012
    Сообщения:
    2
    Симпатии:
    0
    Я же не в Creator делаю, а в VS.
     
Загрузка...

Поделиться этой страницей