我有一个最近才出现的奇怪问题。
当我从 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/