解决Undefined symbols for architecture arm64问题

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 需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,842评论 0 9
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,631评论 25 709
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,932评论 9 468
  • 我羡慕那些怎么吃都不胖但又没得甲亢的,还有那些喝完一斤腿都一点不晃的。他们对于我来说都是神一样的存在。 我周围有那...
    管飞机的舒克阅读 1,287评论 4 0
  • 五个黑衣人又领来了五个百姓,百姓痛哭着,男丁怒睁双目,而老弱妇孺皆泪涕满脸。将军又喊道:“鸣迁,纵情剑到底在哪里?...
    四驱汽车客阅读 1,501评论 1 1