Почему Qt сообщает> 14000 ошибок в этом исходном файле на одну страницу? - PullRequest
1 голос
/ 05 октября 2010

Вот код:

#include <QtCore/QCoreApplication>
#include <QProcess>
#include <QProcessEnvironment>

int main(int argc, char *argv[])
{
    QProcessEnvironment env;

    // Environment variables required by CGI apps

    env.insert("QUERY_STRING",      url.encodedQuery());
    env.insert("REQUEST_URI",       url.toString());
    env.insert("REQUEST_METHOD",    "GET");
    env.insert("REMOTE_ADDR",       pSocket->peerAddress().toString());

    //==========

    QProcess process;
    process.setProcessEnvironment(env);
    process.start("php-cgi",QProcess::ReadWrite);

    process.write("<?php print_r($_GET); ?>");
    process.closeWriteChannel();

    process.waitForFinished();

    qDebug(process.readAll().data());

    return 0;
}

Qt Creator сообщает о более чем 14000 ошибках.Вот небольшой образец из них:

In file included from ../QProcess/main.cpp:2:
../QProcess/QProcess:1: error: stray ‘\177’ in program
../QProcess/QProcess:1: error: stray ‘\2’ in program
../QProcess/QProcess:1: error: stray ‘\1’ in program
../QProcess/QProcess:1: error: stray ‘\1’ in program
In file included from ../QProcess/main.cpp:2:
../QProcess/QProcess:1:8: warning: null character(s) ignored
../QProcess/QProcess:1: error: stray ‘\2’ in program

Ответы [ 2 ]

1 голос
/ 24 января 2012

Если такая проблема возникает не на каждом хосте, то, вероятно, разница в компиляторе.Разница скорее всего в порядке сканирования каталогов заголовочных файлов.Такая ошибка не должна возникать, если каталог стандартных заголовков сканируется до др.

В качестве обходного пути достаточно вручную удалить целевой файл проекта для построения цели.Но это не путь программистов (которые очень ленивы).

Способ программистов - это научить QMake удалять целевой файл непосредственно перед компиляцией исходных текстов проекта (но при этом фаза ссылки будет выполняться постоянно).Для меня (QMake 2.01a под Linux) это достигается добавлением следующих строк в файл проекта:

deltarget.commands = $$QMAKE_DEL_FILE $$TARGET
QMAKE_EXTRA_TARGETS += deltarget
PRE_TARGETDEPS += deltarget

Это объявляет цель deltarget , которая становится встроенной до текущий проект.В этом примере используется необъявленная в ручной переменной QMake QMAKE_DEL_FILE , которая использовалась для удаления файлов (ее содержимое, конечно, зависит от платформы).

1 голос
/ 19 декабря 2011

Вот простой пример экземпляра этой ошибки.Содержимое файла с именем new.cpp:

#include <iostream>

int main(int argc, char *argv[])
{
  std::cout << "Brand new." << std::endl;
  return 0;
}

Теперь скомпилируйте его:

ppu32-g++ new.cpp -o new

Нет проблем.Давайте скомпилируем это снова:

ppu32-g++ new.cpp -o new

OMG!Экран за экраном ошибок!Большинство этих ошибок выглядят так:

./new:1: error: stray '\177' in program

Проблема заключается в том, что компилятор пытается использовать файл new в текущем каталоге в качестве стандартной библиотеки C ++ <new>;используется <iostream>.Фактически любой файл в текущем каталоге, названный в честь заголовка стандартной библиотеки C ++, который используется в компилируемом коде, скорее всего, вызовет ошибку.То, что наш проблемный файл является исполняемым файлом, скрывает сообщения об ошибках.

Это происходит не на всех машинах gcc, которые я пробовал.ppu32-g++ 4.1.1 на PS3 Cell Fedora Linux наверняка задохнется.

...