编译Xcode项目时出错(IPhone)

时间:2010-03-04 15:22:46

标签: iphone ffmpeg

我将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

6 个答案:

答案 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)

与...相同 this problem?

建议:

  

请选择部署目标“iPhone OS 3.0”或更早版本。已知Xcode链接器问题与部署目标“iPhone OS 3.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/