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

标签 c++ qt qt5

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

当我从 Qt 应用程序内部访问外部二进制文件时,应用程序崩溃并出现错误:

Exception Type:  EXC_CRASH (SIGABRT)

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

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

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

至少在我的配置上...

关于c++ - 从 Qt 外部运行时 Qt5 应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18632953/

相关文章:

c++ - Noise++ Perlin 模块一直返回 0

c++ - move 构造函数和静态数组

C++,读取二进制 ifstream 时的奇怪行为

c++ - 编码将 QString 传递给 sqlite3_open 时出现问题

android - 无法在 Android 上使用 AlarmManager 安排通知(使用 Qt)

c++ - 如何处理 C++ 中的命名空间?

c++ - 使用 QT5_ADD_RESOURCES 和使用 CMake 进行多线程编译时损坏的资源 .cpp 文件

c++ - 在 C++ 中使用 utf8 库将 UTF 16 转换为 UTF8

C++/QML : ListView is not updated on dataChanged signal from QAbstractListModel

c++ - 将 Ctrl+C 事件发送到在 Windows 上使用 QProcess 启动的进程