2010-03-04 131 views
5

我将ffmpeg iphone端口添加到我的库中,我可以使用它的一些功能,如avcodec_init(),..没有任何错误。 但是,当我有这个函数调用 “avcodec_register_all” Xcode是编译后给错误编译Xcode项目时出错(IPhone)

的错误信息是:

* --------------- LD:LDR _CFRelease $存根中的12位位移超出范围(4276最大值+/- 4096)_UserRelease $存根/Users/foxit/Documents/CameraTest/build/CameraTest.build/Debug-iphoneos/CameraTest.build/Objects-normal /的ARMv6/CameraTest

命令/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2失败,退出代码1

* -------------

有没有人知道这是什么错?

问候,

Raghu

回答

1

this problem?

建议有:

请选择部署目标 “iPhone OS 3.0” 或更早版本。它是已知的部署目标“iPhone OS 3.1”和更高版本的Xcode链接器问题。

+0

没有这不是问题,同样的事情工作在另一个Xocde项目,我不能使用它出于某种原因 – 2010-03-05 04:17:19

+0

我也看到这个问题,重新排序我的框架不起作用。将我的构建目标从3.1更改为3.0后,问题消失。 – jtrim 2010-05-10 16:46:24

3

此问题存在于iPhone OS 3.1或更高版本,而在Xcode中生成。尝试在目标的链接库阶段重新调用库的链接顺序。我在这里讨论过这个问题:http://www.galloway.me.uk/2009/12/ldr-12-bit-displacement-out-of-range/

在iPhone SDK 3.1及更高版本中存在固有的问题。必须等到Apple修复它,否则我们将不得不进行一些跟踪和错误更改。

在我们的例子中,只需重新排序libavfilter和libavcodec到最后就行。

+0

Hi Raj, 你知道一种将原始表面缓冲区转换为AvFrame()的方法吗? 我想写一个视频录制应用程序。我能够保存图像(屏幕)的原始数据,但无法找到从原始数据到AVframe的转换以对其进行编码。 谢谢 – 2010-03-06 11:34:31

+1

在FFMpeg源代码中关注output-example.c文件。从中实现所需的方法。重写fill_yuv_image()方法,以便使用sws_scale()方法将RGB数据转换为YUV,并将该原始数据填充到作为参数传递给fill_yuv_image()的AVFrame中。 – 2010-03-08 04:46:17

0

由于我使用CMake生成的XCode项目,我没有全部的灵活性,我想重新排序我的链接线。我盯着LD(1)手册页了一会儿,发现这一点:

-no_order_inits

“当-order_file选项不可用 ,链接,勾画出功能 对象文件顺序,并将其移动所有 初始化例程的 的__TEXT部分和终止 例程年底开始使用该选项 禁用初始化和 终止自动 重新安排。”

将此添加到链接行使错误消失。

2

我能够通过取消选择“编译为Thumb”编译器选项来摆脱错误。

因此,这里有我的设置:

Base SDK: iPhone Device 4.0 
iPhone OS Deployment Target: 3.1.3 

我没有添加-no_order_inits连接器的选项,但是这并没有为我工作。

如果您选择3.0的部署目标,那么您也不会收到错误。

顺便说一句,我也使用FFMPEG和libMMS库。

1

对我来说,在4.2和使用的ffmpeg,解决方案是指定“优化(ARMv7的)”,在现场“架构”,而不是“标准(armv6 armv7)” 如果这可以帮助你...