代码之家  ›  专栏  ›  技术社区  ›  Shubham

无法使用QProcess运行简单控制台程序

  •  2
  • Shubham  · 技术社区  · 12 年前

    我创建了一个简单的Qt应用程序,使用QProcess编译C++文件。现在,当我尝试使用QProcess从应用程序运行exe文件时,它不会运行。当我试图手动打开该文件时,我收到一个错误消息:“libwinpthread-1.dll丢失”。

    以下是我如何编译文件-

    QFileInfo finfo(fileName);
    exeFileName = QFileInfo( QDir(finfo.path()), finfo.baseName() + ".exe").filePath();
    QStringList arguments;
    arguments << fileName << "-o" << exeFileName;
    process->start(QString("g++"), arguments);
    

    这是运行它的代码-

    QProcess *runProcess = new QProcess(this);
    runProcess->setStandardInputFile(inputFilename);
    runProcess->setStandardOutputFile(QFileInfo(exeFileName).path() + "/output.txt");
    connect(runProcess, SIGNAL(finished(int)), this, SLOT(runComplete(int)));
    runProcess->start(exeFileName);
    

    基本上,我想编译并运行一个C++文件,为其提供示例输入文件,并将标准输出存储在一个新文件中。这个代码有什么问题?或者其他方式?我正在修7号窗户。此外,我无法理解为什么从Qt应用程序编译时,编译程序需要该dll文件,并且手动编译时运行良好。

    以防万一,这是我试图编译的文件

    //file.cpp
    #include <iostream>
    
    int main() {
        std::string s;
        std::cin >> s;
        std::cout << s;
        return 0;
    }
    
    2 回复  |  直到 12 年前
        1
  •  3
  •   yshurik    12 年前

    您正在以意外的方式使用QProcess的API。 您需要创建参数的QStringList:

    QStringList args;
    args << fileName;
    args << exeFileName;
    ...
    compileProcess->start("g++", args);
    
        2
  •  0
  •   Shubham    12 年前

    我似乎通过提供 -static 选项编译文件时,生成的exe文件运行良好,无需任何外部.dll文件。但它仍然不能从QProcess运行。