美文网首页
解决Undefined symbols for architec

解决Undefined symbols for architec

作者: lattr | 来源:发表于2017-10-12 15:04 被阅读3996次

    Undefined symbols for architecture arm64:

    "_OBJC_CLASS_$_XXX", referenced from: someFile

    ld: symbol(s) not found for architecture arm64

    很多人都遇到过引用文件报错的问题,之所以会造成这个问题,主要还是导入文件时的步骤上出了问题。

    比如你需要将所在YYY工程的A文件引入你的XXX工程,此时你有两种操作方式。

    1.打开YYY工程的A文件的文件夹,将A文件直接拖拽到XXX工程,此时会弹出下图,直接添加。

    添加文件

    2.打开YYY工程的A文件的文件夹,将A文件复制到XXX工程所需要的地方,然后通过下图方式添加。

    添加文件

    两种方式的区别是,第一种方式所加的类、静态库和bundle资源文件不会自动加入到Compile Sources、Link Binary With Libraries和Copy Bundle Resources。以至于XXX工程根本找不到所加的文件。

    资源链接

    所以必须通过第二种方式导入文件。

    其他造成该问题的可以检查Other Linker Flags、Header Search Paths和Library Search Paths的路径是否正确。

    链接标志 搜索路径

    -ObjC:加了这个参数后,链接器就会把静态库中所有的 Objective-C 类和分类都加载到最后的可执行文件中。

    -all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到 ld: duplicate symbol 错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到 -ObjC 失效的情况下使用 -force_load 参数。

    -force_load:所做的事情跟 -all_load 其实是一样的,但是 -force_load 需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载。

    相关文章

      网友评论

          本文标题:解决Undefined symbols for architec

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