繁体   English   中英

从外部Qt运行时Qt5应用程序崩溃

[英]Qt5 app crashes when run from outside Qt

我有一个奇怪的问题,直到最近才出现。

当我从Qt应用程序内部访问外部二进制文件时,该应用程序崩溃并显示以下错误:

Exception Type:  EXC_CRASH (SIGABRT)

但是,当我从Qt Creator中的“构建并运行”运行它时,当我访问应用程序中的某个示例二进制文件时,一切运行正常。

这是我的应用从外部Qt创建者崩溃时遇到的功能

QString Api::getVideoFrame(QString filename, QString position)
{
    const QString ffmpeg = QDir::currentPath()+"/ffmpeg"; //mac version
    QProcess process;
    QStringList args;
    args    << "-ss" << position
            << "-i" << filename
            << "-f" << "image2"
            << "-vframes" << "1"
            //<< "-vcodec" << "bmp"
            << "pipe:1";
    process.start(ffmpeg, args);
    process.waitForFinished();

    return QString(process.readAllStandardOutput().toBase64());
}

访问其他外部二进制文件(在这种情况下不仅限于ffmpeg)时,它也会崩溃。

我觉得它与QDir :: currentPath()有关,因为当我弄乱路径时,它也会从Qt Creator内部崩溃。

显然,我在Contents / MacOS /文件夹中的可执行文件旁边添加了相应的二进制文件

我真的不知道该如何调试..任何线索如何解决这个问题?

实际上,我发现了为什么会发生这种情况,并且值得注意的是

QDir::currentPath()

在Mac osX上必须谨慎使用。

从Qt Creator中执行应用程序后,它将返回:

/Volumes/LSPRO/Build/LSPRO.app/Contents/MacOS

包括.app软件包中te二进制文件的路径

但是当您将其作为独立应用程序运行时,它会返回

/Volumes/LSPRO/Build

至少在我的配置上...

I don't really know how to debug this.. any clue how to solve this?

是的,我有一些线索。

对于这种情况,您可以尝试使用QCoreApplication::applicationDirPath()来使其在MAC上正常工作,这也可以由用户在评论中断言。

在这里,您可以找到文件系统引擎源代码,但是如果您想进一步将问题归结为可疑对象,则可以找到它。 简而言之,那里没有Mac专用代码,而不是Unix。

另外,将来您可能会考虑使用QtMultimedia,而不是处理QProcess和外部执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM