我将ffmpeg iphone端口添加到我的库中,我可以使用它的一些功能,如avcodec_init(),..没有任何错误。 但是当我包含这个函数时,调用“avcodec_register_all”Xcode在编译后给出了错误
错误消息是:
* --------------- ld:来自/Users/foxit/Documents/CameraTest/build/CameraTest.build/Debug-iphoneos/CameraTest.build/的_CFRelease $ stub中的_CFRelease $ stub中的12位移位超出范围(4276 max +/- 4096)对象 - 正常/的ARMv6 / CameraTest
命令/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2因退出代码1而失败
* -------------
有谁知道这有什么不对吗?
此致
Raghu
答案 0 :(得分:3)
在Xcode中构建时,iPhone OS 3.1或更高版本中存在此问题。尝试重新启动目标链接库阶段中库的链接顺序。我已经在http://www.galloway.me.uk/2009/12/ldr-12-bit-displacement-out-of-range/
中讨论了这个问题iPhone SDK 3.1及更高版本存在固有问题。将不得不等到Apple修复它,否则我们将不得不做一些跟踪和错误更改。
在我们的例子中,只需将libavfilter和libavcodec重新排序到最后一个就可以了。
答案 1 :(得分:2)
我能够通过取消选择“Compile For Thumb”编译器选项来摆脱错误。
所以这是我的设置:
Base SDK: iPhone Device 4.0
iPhone OS Deployment Target: 3.1.3
我确实在链接器选项中添加了-no_order_inits,但这对我不起作用。
如果您选择3.0的部署目标,那么您也不会收到错误。
BTW,我也在使用FFMPEG和libMMS库。
答案 2 :(得分:1)
答案 3 :(得分:1)
对于4.2和使用ffmpeg,解决方案是在“架构”字段中指定“Optimized(armv7)”而不是“Standard(armv6 armv7)” 如果这可以帮助你...
答案 4 :(得分:0)
由于我使用的是CMake生成的XCode项目,因此我没有足够的灵活性来重新订购链接行。我盯着ld(1)手册页一段时间,发现了这个:
<强> -no_order_inits 强>
“当-order_file选项不是时 使用时,链接器列出了函数 对象文件顺序,它移动所有 初始化程序的例程开始 __text部分和终止符 程序到最后。使用此选项 禁用自动 重新安排初始化者和 终止子“。
将此添加到链接行会使错误消失。
答案 5 :(得分:0)
我在MonoTouch
中遇到了这个问题,并在此处发布了一个解决方案:http://microsoft2apple.com/2010/09/30/solved-ldr-12-bit-displacement-out-of-range/