首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从外部Qt运行时Qt5应用程序崩溃

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

Stack Overflow用户
提问于 2013-09-05 17:45:30
回答 2查看 858关注 0票数 1

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

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

代码语言:javascript
运行
复制
Exception Type:  EXC_CRASH (SIGABRT)

但是,当我从Qt Creator内部的“构建并运行”中运行它时,当我访问应用程序中遇到外部二进制文件的点时,一切都运行得很好。

这是我在应用程序从Qt creator外部崩溃时遇到的函数

代码语言:javascript
运行
复制
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/文件夹中的可执行文件旁边添加了相应的二进制文件

我真的不知道如何调试这个..有什么线索可以解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2013-09-05 18:30:42

我实际上发现了为什么会发生这种情况,有趣的是,我注意到

代码语言:javascript
运行
复制
QDir::currentPath()

在mac osX上必须小心使用。

当在Qt Creator中执行应用程序时,它会返回:

代码语言:javascript
运行
复制
/Volumes/LSPRO/Build/LSPRO.app/Contents/MacOS

在.app包中包含到te二进制文件的路径

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

代码语言:javascript
运行
复制
/Volumes/LSPRO/Build

至少在我的配置上。

票数 0
EN

Stack Overflow用户

发布于 2013-09-07 15:45:16

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

是的,我有一些线索。

您可以尝试在此场景中使用QCoreApplication::applicationDirPath(),以使其在MAC上正常工作,这也是用户在评论中断言的。

Here,你可以找到文件系统引擎的源代码,但是如果你想进一步追踪这个问题,你的疑犯就是一个bug。简而言之,除了Unix,没有太多特定于Mac的代码。

此外,将来您可能希望考虑QtMultimedia,而不是处理QProcess和外部执行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18632953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档