越狱手机运行程序退出: Killed: 9

本文针对越狱手机上运行的应用程序出现“Killed:9”错误的问题提供了多种解决方案,包括调整签名证书、修改二进制文件架构、重新部署应用等方法。

越狱手机运行程序退出: Killed: 9

这种情况一般是由于签名问题

解决方法1(不推荐):

不使用苹果证书,而是:

  1. 创建自己的代码签名证书
  2. 修改XCODE环境
  3. 修改工程属性添加Build Phase

这样即可解决,详细参见:免证书开发……

------

解决方法2:

另外一种情况:编译的二进制程序在iPhone4上正常运行,在iPhone3GS上出现Killed: 9。

后来尝试使用免证书模式,同样问题,使用ldid -S pro也会出现_asset问题。

最后,新建一个Empty App工程(白屏工程),删除所有.m和.h,将先前工程中的.m和.h复制添加进来,设置标准签名证书,解决!

注意其中出现了一个问题:提示provisioning中不包含这个bundle identifier(其实应该是包含的),编译不过;后来发现,应该在Project->Build Settings->Code Signing中设置正确的开发者证书,然后还要在TARGETS->Build Settings->Code Signing中设置为iPhone Developer(并让Xcode自动显示灰色的(currently matches ….)),就可以了。

-----

解决方法3:

还有一种情况:

删掉手机文件,再上传(不要直接覆盖),运行即可成功

-----

解决方法4:

在mac上先进行ldid -S 删除证书操作,再传到ios上就可以了

解决方法5:

1) Using ldid -S is the correct usage. Not lowercase, as Lois says.

2) Usually, when I get this error, it's because I built my app with the wrong architectures. Most versions ofldid that I've used cannot sign fat binaries. Fat binaries are ones with more than one architecture inside. For example, a dual armv6 and armv7 executable. Or with Xcode 4.5, it's probably defaulting to arvm7and armv7s.

In the project build settings, use the ArchitecturesValid Architectures and Build Active Architecture Onlysettings to determine which architecture executable is built. For jailbreak development, I usually set Build Active Architecture Only to YES. And valid archictures set to armv6 and armv7.

3) Also, some older versions of ldid cannot sign armv7 executables. If you get the pre-built copy from KennyTM's site here, it supports armv7. Note that this ldid is built for Mac OS X, so it's designed to be run on the executable on your Mac, after building without signing in Xcode, but before you upload to your iPhone.

Newer phones can generally run executables built for older architectures, but not the other way around. So, build for the oldest architecture you want to support. You just will lose some optimizations in the newer architectures (which most people don't care too much about ... let me know if your app needs these optimizations, and I'll post more).

So, if you want to support old devices (iPhone < 3GS), I would set Architectures to onlyarmv6, making sure to remove the default setting of $(ARCHS_STANDARD_32_BIT). If you only need support for relatively new ones, then pick armv7, but make sure you use a version of ldid that can sign armv7 binaries.

Edit: to determine if the executable you were trying to sign was a fat one, run this at the command line:

> cd HelloJB.app

> ls

HelloJB     Info.plist  PkgInfo     date.zip    en.lproj

> lipo -info HelloJB 

Non-fat file: HelloJB is architecture: armv7

As you can see in the above output, my HelloJB executable is not fat, and only has armv7 code.

<think> 我们正在处理飞凌开发板(嵌入式Linux环境)上运行Qt程序时出现的两个错误: 1. QXcbConnection: Could not connect to display 2. Process killed by signal 根据引用内容,结合嵌入式开发环境的特点,分析可能的原因及解决方案: 可能原因分析: 1. 显示连接问题(QXcbConnection错误): - 开发板可能没有正确配置显示环境(如缺少X11服务器或环境变量设置不正确) - Qt程序试图连接到一个不存在的显示(DISPLAY环境变量未设置或设置错误) 2. 进程被信号终止(Process killed by signal): - 可能是由于内存不足(OOM killer终止进程) - 也可能是程序崩溃(如段错误)导致 考虑到引用[1]中提到可能与Qt模块自身异常有关(如PyQt4安装问题),但我们的环境是飞凌开发板,通常使用嵌入式Qt,因此需要针对嵌入式环境调整。 解决方案: 步骤1:检查显示环境 - 确认开发板上是否运行了X Server(如Xorg或轻量级的X服务器如Xfbdev)。嵌入式设备常用帧缓冲(framebuffer)或Wayland,但Qt默认可能使用xcb(X11)后端。 - 检查环境变量`DISPLAY`: ```bash echo $DISPLAY ``` 正常情况下应该设置为`:0`(表示第一个显示)。如果没有,可以临时设置: ```bash export DISPLAY=:0 ``` 然后再次运行程序。 - 如果开发板没有运行X Server,考虑使用Qt的帧缓冲模式(不需要X Server): ```bash export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 ``` 其中`/dev/fb0`是帧缓冲设备。 步骤2:切换Qt平台插件 - 飞凌开发板可能使用特定的显示接口(如framebuffer或eglfs)。尝试以下设置: ```bash # 使用eglfs(如果GPU支持OpenGL ES) export QT_QPA_PLATFORM=eglfs # 或使用linuxfb(纯软件渲染) export QT_QPA_PLATFORM=linuxfb ``` - 如果使用触摸屏,可能还需要设置触摸设备: ```bash export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0 ``` 步骤3:检查内存情况 - “Process killed by signal”可能是由于内存不足,系统OOM killer终止了进程。 - 检查可用内存: ```bash free -m ``` - 优化程序内存使用,或者关闭其他占用内存的进程。 步骤4:检查程序依赖 - 确保开发板上安装了所有必要的Qt库。 - 使用`ldd`检查程序依赖: ```bash ldd your_qt_program ``` 查看是否有缺失的库。 步骤5:调试信号终止 - 如果程序崩溃,可能会产生core dump。确保系统开启了core dump: ```bash ulimit -c unlimited ``` 然后再次运行程序,崩溃后会生成core文件,使用gdb分析: ```bash gdb your_qt_program core ``` 步骤6:参考引用[3]中关于QProcess的清理 - 如果程序中使用了QProcess启动外部程序,确保在退出前正确关闭这些进程(避免资源泄漏导致系统杀死进程)。 综合上述,建议先尝试设置显示环境(步骤1和2),如果问题依旧,再检查内存和程序崩溃(步骤3、4、5)。 示例运行命令: ```bash # 设置使用framebuffer export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 ./your_qt_program ``` 如果上述方法无效,可能需要重新配置和编译Qt以适应开发板的硬件。 相关问题: 1. 如何在嵌入式Linux环境下配置Qt的显示后端? 2. 如何调试嵌入式Linux中被信号终止的进程? 3. 如何优化Qt程序的内存使用以在嵌入式设备上运行? </think> ### 解决飞凌开发板 Qt 运行报错的综合方案 #### 🔧 一、QXcbConnection: Could not connect to display 错误解决 1. **检查显示环境变量** 在开发板终端执行: ```bash echo $DISPLAY # 查看显示配置 ``` - 若无输出或值错误,手动设置: ```bash export DISPLAY=:0.0 # 默认显示端口 ``` 2. **配置 Qt 显示后端** 使用帧缓冲(framebuffer)代替 X11: ```bash # 修改 Qt 平台插件 export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0 # 指向帧缓冲设备 export QT_QPA_GENERIC_PLUGINS=evdevkeyboard # 键盘支持 ``` 3. **验证显示服务状态** ```bash ps aux | grep Xorg # 检查X服务是否运行 ``` - 若无 X 服务,改用轻量级方案: ```bash sudo apt install xserver-xorg-core xinit startx & # 启动X服务 ``` #### ⚠️ 二、Process killed by signal 错误解决 1. **内存泄漏排查** 参考引用[3],检查 QProcess 资源释放: ```cpp // 确保退出时关闭子进程 if(process) { process->close(); delete process; // 释放内存 process = nullptr; } ``` 2. **检查硬件加速兼容性** 如引用[1]提到的 Qt 模块异常: ```bash # 验证 OpenGL 支持 glxinfo | grep OpenGL # 无输出则需安装驱动 sudo apt install mesa-utils libgl1-mesa-dev ``` 3. **信号追踪调试** 使用 `strace` 捕获终止信号: ```bash strace -f -o qt_debug.log ./your_qt_app grep SIGABRT qt_debug.log # 检查信号类型 ``` - 常见信号:`SIGSEGV`(内存违规)/ `SIGABRT`(断言失败) #### 🛠️ 三、嵌入式环境专项优化 1. **交叉编译配置** 在 Qt 配置中添加嵌入式支持: ```bash ./configure -embedded arm -xplatform qws/linux-arm-g++ -no-gui ``` 2. **文件系统权限修复** 开发板执行: ```bash chmod 777 /tmp # Qt需要/tmp目录权限 mkdir -p ~/.local/share # 创建运行时目录 ``` 3. **轻量级替代方案** 若仍失败,改用 Qt for Embedded Linux: ```bash export QT_QPA_PLATFORM=eglfs # 使用EGLFS后端 export QT_QPA_EGLFS_INTEGRATION=eglfs_kms # KMS驱动 ``` #### ✅ 验证步骤 ```mermaid graph TD A[启动应用] --> B{报错类型} B -->|QXcbConnection| C[设置DISPLAY变量] B -->|Process killed| D[检查内存泄漏] C --> E[配置QT_QPA_PLATFORM] D --> F[strace跟踪信号] E --> G[测试帧缓冲输出] F --> H[分析日志] G & H --> I[运行成功] ``` #### 💡 注意事项 1. 开发板需预装 `libxcb-xinerama0` 和 `libxkbcommon-x11-0` 库 2. 图形程序内存占用不宜超过开发板物理内存的 50% 3. 摄像头应用需额外配置 `v4l2` 驱动(参考引用[2])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值