Error while compiling the Xcode project (IPhone)

2020-07-11 09:58发布

问题:

I added ffmpeg iphone port into my library and I can able to use a few of its functions like avcodec_init(),.. without any errors. But when I include this function call "avcodec_register_all" Xcode is giving error after compilation

The error message is :

*--------------- ld: ldr 12-bit displacement out of range (4276 max +/-4096) in _CFRelease$stub in _CFRelease$stub from /Users/foxit/Documents/CameraTest/build/CameraTest.build/Debug-iphoneos/CameraTest.build/Objects-normal/armv6/CameraTest

Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

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

Does anyone know whats wrong with this ?

Regards,

Raghu

回答1:

This problem exists in iPhone OS 3.1 or later while building in Xcode. Try re-arringing the link order of the libraries in your target's link library phase. I have discussed this issue in: http://www.galloway.me.uk/2009/12/ldr-12-bit-displacement-out-of-range/

There is an inherent problem in iPhone SDK 3.1 and later. Will have to wait until Apple fixes it or we will have to do some trail and error changes.

In our case, just re-ordering libavfilter and libavcodec to the last would simply work.



回答2:

I was able to get rid of the error by unselecting the "Compile For Thumb" compiler option.

So here are my settings:

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

I did add -no_order_inits to the linker options but that did not work for me.

If you select a deployment target of 3.0 then you also will not get the error.

BTW, I am also using the FFMPEG and libMMS libraries.



回答3:

Same as this problem?

Suggestion there is:

Please select deployment target "iPhone OS 3.0" or earlier. It is known Xcode linker issue with deployment targets "iPhone OS 3.1" and later.



回答4:

For me on 4.2 and using ffmpeg, solution was to specify "Optimized (armv7)" in field "Architectures" instead "Standard (armv6 armv7)" if this can help you...



回答5:

Since I am using a CMake generated XCode project I don't have all the flexibility I would like in re-ordering my link lines. I stared at the ld(1) man page for a while and found this:

-no_order_inits

"When the -order_file option is not used, the linker lays out functions in object file order and it moves all initializer routines to the start of the __text section and terminator routines to the end. Use this option to disable the automatic re-arrangement of initializers and terminators."

Adding this to the link line made the error go away.



回答6:

I've had this problem in MonoTouch, and posted a solution for it here: http://microsoft2apple.com/2010/09/30/solved-ldr-12-bit-displacement-out-of-range/



标签: iphone ffmpeg