2010-03-04 144 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)」 如果這可以幫助你...