Qt5 应用程序在从 Qt 外部运行时崩溃
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内部崩溃。
显然我在内容/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和外部执行。
- CMake-按正确顺序将项目与C运行时对象文件链接
- 我在c++代码中生成了一个运行时#3异常
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- Windows7+:如何构建不需要任何额外/外部运行时库的C++ Windows 控制台应用程序?
- 在虚幻引擎中引用外部库时出现运行时错误
- 为什么我的全球外部lambda变量在运行时不初始化
- 在VS中编译程序,无需外部运行时DLL
- 在调试器外部运行时发布生成更改行为
- 更准确的计时器,用于测量来自 Python 的外部.exe运行时
- Qt5 应用程序在从 Qt 外部运行时崩溃
- 在运行时定义的C++全局外部常量可用于多个源文件
- 文本文件仅在Visual Studio外部运行时找到
- 声明的Hello World DLL文件.运行时未找到外部函数
- 在添加windows phone运行时组件时无法解析的外部符号