Error building app: Undefined symbols for architecture armv7 - iphone

I am having an issue trying to build my program, which is using a C++ class to dela with FFmpeg objects:
Undefined symbols for architecture armv7:
"__Z13avcodec_open2P14AVCodecContextP7AVCodecPP12AVDictionary", referenced from:
__Z10openStreamPKcb in RTPReader.o
"__Z21avcodec_decode_audio4P14AVCodecContextP7AVFramePiP8AVPacket", referenced from:
__Z13getStreamDataRPhRi in RTPReader.o
"__Z20avformat_close_inputPP15AVFormatContext", referenced from:
__Z11closeStreamv in RTPReader.o
"__Z21avformat_network_initv", referenced from:
__Z10openStreamPKcb in RTPReader.o
"__Z26avcodec_get_frame_defaultsP7AVFrame", referenced from:
__Z13getStreamDataRPhRi in RTPReader.o
"__Z15av_register_allv", referenced from:
__Z10openStreamPKcb in RTPReader.o
"__Z19av_find_best_streamP15AVFormatContext11AVMediaTypeiiPP7AVCodeci", referenced from:
__Z10openStreamPKcb in RTPReader.o
"__Z14av_free_packetP8AVPacket", referenced from:
__Z13getStreamDataRPhRi in RTPReader.o
__Z11closeStreamv in RTPReader.o
"__Z6av_logPviPKcz", referenced from:
__Z10openStreamPKcb in RTPReader.o
__Z13getStreamDataRPhRi in RTPReader.o
"__Z19avformat_open_inputPP15AVFormatContextPKcP13AVInputFormatPP12AVDictionary", referenced from:
__Z10openStreamPKcb in RTPReader.o
"__Z26av_samples_get_buffer_sizePiii14AVSampleFormati", referenced from:
__Z13getStreamDataRPhRi in RTPReader.o
"__Z19avcodec_alloc_framev", referenced from:
__Z13getStreamDataRPhRi in RTPReader.o
"__Z25avformat_find_stream_infoP15AVFormatContextPP12AVDictionary", referenced from:
__Z10openStreamPKcb in RTPReader.o
"__Z13av_read_frameP15AVFormatContextP8AVPacket", referenced from:
__Z13getStreamDataRPhRi in RTPReader.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Somehow it is adding a prefix _Z## to all my C++ methods, and I don't know why.
What could be the issue?

Al the __Z## stuff you see, is normal. It is called 'name mangling' in C++, see http://en.wikipedia.org/wiki/Name_mangling for a good explanation.
I have to make a couple of guesses here, lacking more detailed info (sorry, I cannot comment yet, only answer). Looking at the ffmpeg api docs, it seems that FFmpeg has a C API, not C++. If that is indeed the case, your solution may be to wrap all #includes of FFmpeg files with extern "C", for example (see http://developers.sun.com/solaris/articles/mixing.html for explanation):
extern "C" {
#include <someffmpegheader.h>
}
As for the reason the link fails, are you linking against a pre-built ffmpeg library, or are you including the ffmpeg source files in your project? If you're linking to a library, it may not have the correct architectures. If you run the following command in a terminal window, it will tell you what architectures are available in the library:
file libffmpeg.a

It seems to me that this library was linked with extern "C", but you try to link without this clause. Maybe You take .H files from one version, and .LIB files from completly another.
Try use extern "C" clause on imported functions - in C++ when you try access C functions from C++ code You should use this clause

Related

Undefined symbols for architecture armv7 after adding .a file

I'm trying to build a small app using a *.a, *.h file I received from a certain vendor.
this is the first time I'm adding external files to a project.
I added the files and I am getting these errors.
Undefined symbols for architecture armv7:
"_vDSP_fft_zropD", referenced from:
_fft_hr_estimation in libmyTrekSDK_armv7.a(hr_calc.o)
"_vDSP_vclrD", referenced from:
_fft_hr_estimation in libmyTrekSDK_armv7.a(hr_calc.o) "_vDSP_vdbconD", referenced from:
_fft_hr_estimation in libmyTrekSDK_armv7.a(hr_calc.o)
"_vDSP_vmulD", referenced from:
_fft_hr_estimation in libmyTrekSDK_armv7.a(hr_calc.o) "_vDSP_hamm_windowD", referenced from:
_fft_hr_init in libmyTrekSDK_armv7.a(hr_calc.o) "_vDSP_zaspecD", referenced from:
_fft_hr_estimation in libmyTrekSDK_armv7.a(hr_calc.o) "_OBJC_CLASS_$_EAAccessoryManager", referenced from:
objc-class-ref in libmyTrekSDK_armv7.a(hrMonitor.o) "_EAAccessoryDidDisconnectNotification", referenced from:
-[HRMonitor startup] in libmyTrekSDK_armv7.a(hrMonitor.o) "_vDSP_create_fftsetupD", referenced from:
_fft_hr_init in libmyTrekSDK_armv7.a(hr_calc.o) "_EAAccessoryDidConnectNotification", referenced from:
-[HRMonitor startup] in libmyTrekSDK_armv7.a(hrMonitor.o) "_OBJC_CLASS_$_EASession", referenced from:
objc-class-ref in libmyTrekSDK_armv7.a(hrMonitor.o) "_vDSP_ctozD", referenced from:
_fft_hr_estimation in libmyTrekSDK_armv7.a(hr_calc.o) "_vDSP_maxmgvD", referenced from:
_fft_hr_estimation in libmyTrekSDK_armv7.a(hr_calc.o) "_vDSP_destroy_fftsetupD", referenced from:
_fft_hr_free in libmyTrekSDK_armv7.a(hr_calc.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed
with exit code 1 (use -v to see invocation)
So far I've tried: (mentioned in other posts)
I've made sure the the *.a file is included in the Link Binary With Library .
Tried to change C++ Language Dialect and C++ Standard Library to Compiler Default.
More info:
The files are in the project folder.
I'm using an iPhone 4S v.6.1.3 and the project's deployment target is iOS 6.1.
Just for future I got the "_OBJC_CLASS_$_EASession", referenced from: error. It was fixed by adding ExternalAccessory.framework to Targets > myApp > Build Phases > Link Binary with Libraries
Check lib path is correct in framework search path / library search path
check other linker flags needed for your lib source
Please refer this Answer for more details

Reference library cyberlink

I reference the CyberLink library inside another target in an iPhone project.
But I have some bugs while compiling when I implemented a CyberLink class.
those kind of errors :
Undefined symbols:
"_xmlParseDocument", referenced from:
_cg_libxml2_parsewrapper in libCyberLink.a(cxml_parser_libxml2.o)
"_xmlGetPredefinedEntity", referenced from:
_cg_libxml2_get_entity in libCyberLink.a(cxml_parser_libxml2.o)
"_xmlCreateMemoryParserCtxt", referenced from:
_cg_libxml2_parsewrapper in libCyberLink.a(cxml_parser_libxml2.o)
"_xmlFreeParserCtxt", referenced from:
_cg_libxml2_parsewrapper in libCyberLink.a(cxml_parser_libxml2.o)
"_xmlFreeDoc", referenced from:
_cg_libxml2_parsewrapper in libCyberLink.a(cxml_parser_libxml2.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
If somebody can help me, it would be nice =)
You have to add -lxml2 in the "other linker flags" properties of the build tab in the info of your target.

Linker errors after upgrade to xcode 3.2.3 for iphone app

I've just upgraded to XCODE 3.2.3 and upgraded my base sdk from 3.0 to 3.2 iphone sdk. After doing this I started getting a bunch of link errors with barely any info, here's what I got:
".objc_class_name_CATransition", referenced from:
".objc_class_name_NSObject", referenced from:
".objc_class_name_NSFileManager", referenced from:
".objc_class_name_NSString", referenced from:
".objc_class_name_NSError", referenced from:
".objc_class_name_CABasicAnimation", referenced from:
".objc_class_name_NSOperation", referenced from:
".objc_class_name_CJSONDeserializer", referenced from:
".objc_class_name_UIWindow", referenced from:
".objc_class_name_NSException", referenced from:
".objc_class_name_UIColor", referenced from:
".objc_class_name_CATransaction", referenced from:
".objc_class_name_CLLocationManager", referenced from:
".objc_class_name_MPMoviePlayerController", referenced from:
".objc_class_name_NSMutableSet", referenced from:
".objc_class_name_UIFont", referenced from:
".objc_class_name_NSFileHandle", referenced from:
".objc_class_name_MFMailComposeViewController", referenced from:
".objc_class_name_CAKeyframeAnimation", referenced from:
".objc_class_name_UIImage", referenced from:
".objc_class_name_UIApplication", referenced from:
".objc_class_name_UILabel", referenced from:
".objc_class_name_UIView", referenced from:
".objc_class_name_CLLocation", referenced from:
".objc_class_name_NSMutableString", referenced from:
".objc_class_name_CJSONSerializer", referenced from:
".objc_class_name_NSTimer", referenced from:
".objc_class_name_NSValue", referenced from:
".objc_class_name_NSMutableData", referenced from:
".objc_class_name_NSNumber", referenced from:
"_objc_exception_match", referenced from:
".objc_class_name_UINavigationItem", referenced from:
".objc_class_name_UIViewController", referenced from:
".objc_class_name_NSMutableArray", referenced from:
".objc_class_name_UIScreen", referenced from:
".objc_class_name_NSHTTPCookieStorage", referenced from:
".objc_class_name_MKPinAnnotationView", referenced from:
".objc_class_name_NSNotificationCenter", referenced from:
"_OBJC_CLASS_$_QWAdView", referenced from:
".objc_class_name_NSProcessInfo", referenced from:
".objc_class_name_UITableViewCell", referenced from:
".objc_class_name_CAAnimationGroup", referenced from:
".objc_class_name_NSInvocation", referenced from:
".objc_class_name_NSURL", referenced from:
".objc_class_name_NSSet", referenced from:
"_objc_exception_extract", referenced from:
".objc_class_name_UISearchBar", referenced from:
".objc_class_name_NSMutableURLRequest", referenced from:
".objc_class_name_NSRunLoop", referenced from:
".objc_class_name_NSData", referenced from:
".objc_class_name_NSDate", referenced from:
".objc_class_name_UIBarButtonItem", referenced from:
".objc_class_name_UITableView", referenced from:
".objc_class_name_NSURLRequest", referenced from:
".objc_class_name_NSOperationQueue", referenced from:
".objc_class_name_UIActionSheet", referenced from:
".objc_class_name_UIDevice", referenced from:
".objc_class_name_MKMapView", referenced from:
".objc_class_name_UIToolbar", referenced from:
".objc_class_name_NSXMLParser", referenced from:
".objc_class_name_NSHTTPCookie", referenced from:
".objc_class_name_UIImageView", referenced from:
".objc_class_name_CAMediaTimingFunction", referenced from:
".objc_class_name_NSScanner", referenced from:
"_objc_exception_try_exit", referenced from:
".objc_class_name_NSDateFormatter", referenced from:
".objc_class_name_UIAccelerometer", referenced from:
"_objc_exception_try_enter", referenced from:
".objc_class_name_NSCharacterSet", referenced from:
".objc_class_name_UIScrollView", referenced from:
".objc_class_name_UIButton", referenced from:
".objc_class_name_UINavigationBar", referenced from:
".objc_class_name_UIAlertView", referenced from:
".objc_class_name_NSUserDefaults", referenced from:
".objc_class_name_NSThread", referenced from:
".objc_class_name_NSPropertyListSerialization", referenced from:
"_OBJC_CLASS_$_GANTracker", referenced from:
".objc_class_name_NSMutableDictionary", referenced from:
".objc_class_name_CALayer", referenced from:
".objc_class_name_UIWebView", referenced from:
".objc_class_name_NSBundle", referenced from:
".objc_class_name_NSURLConnection", referenced from:
".objc_class_name_NSAutoreleasePool", referenced from:
".objc_class_name_UIPageControl", referenced from:
".objc_class_name_NSAssertionHandler", referenced from:
".objc_class_name_MKAnnotationView", referenced from:
".objc_class_name_NSDictionary", referenced from:
".objc_class_name_NSLocale", referenced from:
".objc_class_name_NSArray", referenced from:
".objc_class_name_UIActivityIndicatorView", referenced from:
"_OBJC_CLASS_$_AdMobView", referenced from:
Any ideas?
UPDATE:
Seems like 3rd party libraries are causing the issues. These include libraries for admob, quattro, and Google Analytics. Only admob has updated their libraries so will have to remove the other ones
Same problem. Tons of link errors when compiling for simulator; device works fine.
Checked frameworks as suggested by Sim but looked fine.
Edit: All of the problems seem to be with pre-compiled 3rd party libraries (in my case that means the Facebook Three20.a library and Occipital's libRedLaserSDK.a). Anybody know if I need to use versions of those libraries recompiled for 4.0, or if there is there another fix?
Edit2: And one more clue, which suggests some of the other posters are on the right track: in my project "Groups & Files" list, all of my frameworks appear in red text. Yet if I check any one of them, the target checkbox is checked.
I don't know why this suddenly started happening when you upgraded, but these link errors mean that your link line is missing some frameworks. It would be very helpful to see the full compiler output (expand the transcript in Build Results to get this).
Looks like QuartzCore, Foundation, MediaPlayer, UIKit and others are missing, based on the symbols which are undefined. I figured this out by searching for the missing symbols (e.g. "NSOperation") in the iPhone developer site. The documentation for each function lists the framework that defines the function.
Check Frameforks is checked for the new build target. Select UIkit.framework -> Get Info and check general and targets tabs
I would try reinstalling XCode.
Backup your /Developer folder first then give these steps a go.
From the terminal use:
sudo /Developer/Library/uninstall-devtools --mode=all
to uninstall XCode and the iPhone SDKs, then delete the /Developer folder after you've done this to ensure that XCode and the iPhone SDK have been cleanly removed from your system. Reinstall Xcode afterwards.
I had this same problem a couple of days ago, but for me just restarting Xcode fixed it, I could build my app without any problems. I have no idea what caused this to happen in the first place, though.

iPhone CAAnimation problem

I am getting the following errors when I try to use the CAAnimation constants, in a program I just wrote. I am able to run the "ViewTransitions" example (from the apple library, http://developer.apple.com/iphone/library/samplecode/ViewTransitions/index.html), and I do not see anything that has been done there, that I haven't :mad:.
P.S. - I did include QuartzCore/QuartzCore.h ..
"_kCAMediaTimingFunctionEaseInEaseOut", referenced from:
_kCAMediaTimingFunctionEaseInEaseOut$non_lazy_ptr in EMISNewsWebViewController.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
"_kCATransitionFromTop", referenced from:
_kCATransitionFromTop$non_lazy_ptr in EMISNewsWebViewController.o
"_kCATransitionPush", referenced from:
_kCATransitionPush$non_lazy_ptr in EMISNewsWebViewController.o
".objc_class_name_CAMediaTimingFunction", referenced from:
literal-pointer#__OBJC#__cls_refs#CAMediaTimingFunction in EMISNewsWebViewController.o
".objc_class_name_CATransition", referenced from:
literal-pointer#__OBJC#__cls_refs#CATransition in EMISNewsWebViewController.o
"_kCAMediaTimingFunctionEaseInEaseOut", referenced from:
_kCAMediaTimingFunctionEaseInEaseOut$non_lazy_ptr in EMISNewsWebViewController.o
Any help will be greatly appreciated.
Check if you have added QuartzCore.framework to link to your project.

How do I use Apple Keychain?

I am using trying to use scifihifi-iphone (from Github) to store and retrieve usernames and passwords. However, when I add the class SFHFKeychainUtils I get the following errors:
"_kSecAttrAccount", referenced from:
_kSecAttrAccount$non_lazy_ptr in SFHFKeychainUtils.o
"_SecItemDelete", referenced from:
+[SFHFKeychainUtils deleteItemForUsername:andServiceName:error:] in SFHFKeychainUtils.o
"_kSecReturnAttributes", referenced from:
_kSecReturnAttributes$non_lazy_ptr in SFHFKeychainUtils.o
"_kSecClass", referenced from:
_kSecClass$non_lazy_ptr in SFHFKeychainUtils.o
"_kSecClassGenericPassword", referenced from:
_kSecClassGenericPassword$non_lazy_ptr in SFHFKeychainUtils.o
"_SecItemAdd", referenced from:
+[SFHFKeychainUtils storeUsername:andPassword:forServiceName:updateExisting:error:] in SFHFKeychainUtils.o
"_kSecAttrLabel", referenced from:
_kSecAttrLabel$non_lazy_ptr in SFHFKeychainUtils.o
"_SecItemUpdate", referenced from:
+[SFHFKeychainUtils storeUsername:andPassword:forServiceName:updateExisting:error:] in SFHFKeychainUtils.o
"_kSecAttrService", referenced from:
_kSecAttrService$non_lazy_ptr in SFHFKeychainUtils.o
"_kSecReturnData", referenced from:
_kSecReturnData$non_lazy_ptr in SFHFKeychainUtils.o
"_SecItemCopyMatching", referenced from:
+[SFHFKeychainUtils getPasswordForUsername:andServiceName:error:] in SFHFKeychainUtils.o
+[SFHFKeychainUtils getPasswordForUsername:andServiceName:error:] in SFHFKeychainUtils.o
"_kSecValueData", referenced from:
_kSecValueData$non_lazy_ptr in SFHFKeychainUtils.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
What am I leaving out? When I click the errors, it doesn't take me to any place in the code.
Add Security.framework, then rebuild. Sometimes I find I have to build clean and then rebuild.
To add this, right click on your target in Xcode, then Add->Existing Frameworks and choose (or navigate) to Security.framework.