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
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.
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.
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.
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...
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.
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/