解决Undefined symbols for architecture arm64问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决Undefined symbols for architecture arm64问题相关的知识,希望对你有一定的参考价值。

参考技术A 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 architecture arm64问题的主要内容,如果未能解决你的问题,请参考以下文章

Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法

Undefined symbols for architecture arm64解决方案

ios Undefined symbols for architecture arm64

(转)xcode报错:Undefined symbols for architecture x86_64

解决Xcode引用VLCKit之后Undefined symbols for architecture 问题

mac编译openresty报Undefined symbols for architecture x86_64