美文网首页iOS开发指南
xcode调试之-Undefined symbols for a

xcode调试之-Undefined symbols for a

作者: KODIE | 来源:发表于2017-05-06 11:48 被阅读1512次
    一、背景简介

    出现以上这个问题,一般都是我们在导入第三方框架的时候容易出现的问题,还有一个是i386框架问题,具体框架是干嘛用的可以具体参见iOS 中的 armv7,armv7s,arm64,i386,x86_64 都是什么
    具体截图如下:

    图片 1.png

    出现此问题分两种情况:
    1>第一种是第三方的,但是第三方的一般是有真机的和模拟器的静态库都有的,所以这个基本上不用担心,重要的是第三方SDK有很多的系统依赖库,可能是系统依赖库没有导入或者导全。
    2>第二种就是我们自制的静态库,可能只编译了真机的静态库,导入之后然后运行的时候用的模拟器来运行,就会报这样的错误了,或者只编译了模拟器的静态库,但是用真机运行也会报类似的错误。

    二、问题解决

    1、针对于第二种这种编译SDK的问题,有一个关于合并这两种架构体系下的静态库问题, iOS 制作自己的FrameWork遇到的一些问题 以及FrameWork通过包合并支持arm64 armv7 i386 架构
    2、针对于第一种第三方框架的系统依赖库未导入或者未导入完全导致的错误,有以下的对照表,可以让大家参照去导入,对照表如下:

    framework名 报错
    GLKit.framework OBJC_CLASS$_GLKView
    * _GLKMatrix4Identity
    MobileCoreServices.framework _kUTTagClassMIMEType
    * _UTTypeCreatePreferredIdentifierForTag
    CoreVideo.framework _CVOpenGLESTextureCacheCreateTextureFromImage
    * _CVOpenGLESTextureGetName
    * _CVOpenGLESTextureCacheCreate
    * _CVOpenGLESTextureCacheFlush
    * _CVPixelBufferGetWidth
    * _CVOpenGLESTextureGetTarget
    * _kCVPixelBufferPixelFormatTypeKey
    * _kCVImageBufferYCbCrMatrix_ITU_R_601_4
    * _CVPixelBufferGetHeight
    * _CVBufferGetAttachment
    * _kCVImageBufferYCbCrMatrixKey
    StoreKit.framework OBJC_CLASS$_SKProductsRequest
    * OBJC_CLASS$_SKMutablePayment
    * OBJC_CLASS$_SKPaymentQueue
    * OBJC_CLASS$_SKStoreProductViewController
    * _SKStoreProductParameterITunesItemIdentifier
    MediaPlayer.framework _MPMoviePlayerPlaybackDidFinishNotification
    * _MPMoviePlayerPlaybackStateDidChangeNotification
    * OBJC_CLASS$_MPMoviePlayerController
    * OBJC_CLASS$_MPVolumeView
    SafariServices.framework OBJC_CLASS$_SFSafariViewController
    AdSupport.framework OBJC_CLASS$_ASIdentifierManager
    CoreMotion.framework OBJC_CLASS$_CMMotionManager
    CoreTelephony.framework _CTRadioAccessTechnologyDidChangeNotification
    * OBJC_CLASS$_CTTelephonyNetworkInfo
    MessageUI.framework OBJC_CLASS$_MFMailComposeViewController
    * OBJC_CLASS$_MFMessageComposeViewController
    CoreText.framework _CTFramesetterCreateWithAttributedString
    * _CTFramesetterSuggestFrameSizeWithConstraints
    GameKit.framework OBJC_CLASS$_GKAchievement
    * OBJC_CLASS$_GKScore
    * OBJC_CLASS$_GKGameCenterViewController
    * OBJC_CLASS$_GKLocalPlayer
    GameController.framework _GCControllerDidConnectNotification
    * _GCControllerDidDisconnectNotification
    SystemConfiguration.framework _SCNetworkReachabilityCreateWithAddress
    * _SCNetworkReachabilityGetFlags
    * _SCNetworkReachabilityCreateWithName
    * _SCNetworkReachabilitySetDispatchQueue
    * _SCNetworkReachabilitySetCallback
    Security.framework _SecCertificateCreateWithData
    * _SecTrustCopyExceptions
    * _SecTrustEvaluate
    * _SecTrustSetAnchorCertificates
    * _SecTrustSetExceptions
    CoreMedia.framework _CMTimeGetSeconds
    * _CMTimeMakeWithSeconds
    * _CMTimeMake
    * _kCMTimeZero
    OpenGLES.framework OBJC_CLASS$_EAGLContext
    * _glActiveTexture
    CFNetwork.framework _CFHostCreateWithName
    * _CFHostStartInfoResolution
    * _CFHostGetAddressing
    CoreData.framework _NSManagedObjectModel
    * _NSAttributeDescription
    * _NSEntityDescription
    * _NSPersistentStoreCoordinator
    * _NSFetchRequest
    * _NSManagedObjectContext
    * _NSSQLiteErrorDomain
    * _NSSQLiteStoreType
    * _NSOverwriteMergePolicy
    ReplayKit OBJC_CLASS$_RPScreenRecorder
    * OBJC_CLASS$_RPBroadcastActivityViewController
    MapKit.framwork OBJC_CLASS$_MKMapItem
    * _MKLaunchOptionsDirectionsModeKey
    * OBJC_CLASS$_MKPlacemark
    * _MKLaunchOptionsDirectionsModeDriving
    * _MKLaunchOptionsShowsTraffickey
    系统动态库 关联的报错引用
    libz.tbd/libz.dylib _inflate
    * deflateInit2
    * _deflateEnd
    * _inflateInit2
    * _deflate
    * _get_crc_table
    * _inflate
    * _inflateEnd
    libsqlite3.tbd _sqlite3_step
    * _sqlite3_free
    * _sqlite3_column_int
    * _sqlite3_column_int64
    * _sqlite3_column_text
    * _sqlite3_exec
    * _sqlite3_finalize
    * _sqlite3_close
    * _sqlite3_open
    * _sqlite3_prepare_v2
    libstdc++.tbd ___gxx_personality_v0

    扩展一:

    如果在编译链接的过程中出现如下报错:
    "OBJC_CLASS$_DOUMPMediaLibraryAssetLoader", referenced from:

    那么解决办法如下:
    在DOUMPMediaLibraryAssetLoader的.h和.m文件中的开头和结尾,注释掉或删除 #if TARGET_OS_IPHONE 和 #endif

    扩展二:

    如果我们在链接的时候报错了,只要不是动态库,看起来不像自定义的那种你就搜一下,比如出现如下的报错:

    Snip20170817_126.png

    那这个我们上面没有收录到的话,那你就可以大概猜一下,根据关键字"CBUUID"还有CBCentralManager这俩的话,很容易猜到系统的Framework"CoreBlutooth.framework",蓝牙里面会用到UUID,所以很容易猜的不要惊慌,教大家一个方法:
    首先你看到有一个C,那你现在Build Phrase里面敲一个C,然后再看

    Snip20170817_128.png

    然后再看下面显示列表中的含有B的,发现好像也就CoreBlutooth合适了,所以导入看下就知道了。

    寄语

    希望大家看了我的简书之后自己以后遇到了类似的库缺失问题解决了的,能够来此补充下,没解决的可以评论交流,以上!!!

    小七.jpg

    相关文章

      网友评论

        本文标题:xcode调试之-Undefined symbols for a

        本文链接:https://www.haomeiwen.com/subject/wfpetxtx.html