Undefined symbols for architecture armv7:

来源:互联网 发布:angularjs遍历json 编辑:程序博客网 时间:2024/04/19 15:34

Undefined symbols for architecture armv7:

更新百度统计的时候遇到了这样的问题,可能有几个原因,我总结了两点

一个是在Xcode Build Phase 的Link Binary With Libraries 添加对应的库

另一个是这个库(我用的是百度统计)需要添加对应的framework 

(百度统计说添加一个AdSuppport.framework,如果没有这个需求的话不要添加,但是个人觉得百度这个库太流氓了,必须添加才能解决问题)


解决完问题又出现了错误

duplicate symbol _protobuf_c_buffer_simple_append in:

/xxx-ios_trunk/xxx/BaiduMobStat/libBaiduMobStat.a(protobuf-c-DA882FF7B298838E.o)

/xxx-ios_trunk/xxx/BaiduMobStat/libBaiduMobStat.a(protobuf-c-5B50085BE1AF747D.o)

...

ld: 16 duplicate symbols for architecture i386

clang: error: linker command failed with exit code 1 (use -v to see invocation)


解决方法:

选中工程,target,切换到buildsetting标签,定位到other link flag,

输入: 去除-all_load,即可


至于为神马去掉 -all_load 

包含静态库时候需要在Target的Other linker flags里面加上值:-objC,-all_load,-force_load

对于64位机子和iPhone OS应用

解决方法是使用-all_load 或者 -force_load。

-all_load强迫链接器从它能看见的所有文档中加载所有的对象文件,甚至那些没有OC代码的文档。

-force_load适用于Xcode3.2+版本,它允许finer得到文档加载的控制。每一个-force_load操作必须跟着一个文档路径,文档中的每一个对象文件将会被加载。

 

-all_load就是会加载静态库文件中的所有成员,

-ObjC就是会加载静态库文件中实现一个类或者分类的所有成员,

-force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。

 

举个例子

当链接一个包含类别的OC静态库时候,将会得到一个运行时异常:"selector not recognized"。你需要设置Other Linker Flags的值为-ObjC就OK了


当发布的时候把生产target的 other linker flages 里面的内容全部清除也没关系



0 0
原创粉丝点击