请教库冲突的导致的 duplicate symbol .a链接错误

请教库冲突的导致的 duplicate symbol 链接错误_百度知道
请教库冲突的导致的 duplicate symbol 链接错误
查看了JCNotification憨户封鞠莩角凤携脯毛BannerPresenterIOSStyle源代码, 发现有冲突的是以下可能是由以下两个函数名,可能编译后编译器将名字加了_前缀. CGFloat DegreesToRadians(CGFloat degrees) { return degrees * M_PI / 180.0; }; CGFloat RadiansToDegrees
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁请教库冲突的导致的 duplicate symbol 链接错误_百度知道
请教库冲突的导致的 duplicate symbol 链接错误
提问者采纳
可能是作为两个简单的函数: 将上面的函数名更改一下, 发现有冲突的是以下可能是由以下两个函数名. CGFloat DegreesToRadians(CGFloat degrees) { return degrees * M_PI / }. 我的做法时; 180.0 &#47,可能编译后编译器将名字加了_前缀.0; CGFloat RadiansToDegrees(CGFloat radians) { return radians * 180.0.0 &#47查看了JCNotificationBannerPresenterIOSStyle源代码; CGFloat MyRadiansToDegrees(CGFloat radians) { return radians * 180; M_PI,而是下载下来做为项目的一部分,不在使用cocoapods管理此库: CGFloat MyDegreesToRadians(CGFloat degrees) { return degrees * M_PI / }; 180; }, 然后修改源代码; M_PI; 然后编译就通过了; },跟其他的函数冲突了吧
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁iOS解决两个静态库的冲突&duplicate&symbol
解决TencentOpenAPI.framework与ZbarSDK中& _base64_encode 函数的冲突
后来在网络上搜寻,删除掉 Other Linker
Flag 的&-all_load 就可以解决静态库冲突的问题,
但是这样做的话,会使一些外部的静态库,使用objc扩展函数(catagory)的方法失效。例如BaiduMapApi
如果是有些库使用到了扩展函数(catagory)可以分别对这个库进行加载
使用:-force_load
-force_load
BaiduMapApi/libs/Release-iphoneos/libbaidumapapi.a
(BaiduMapApi是添加到当前目录下的)
-force_load $(BUILT_PRODUCTS_DIR)/libxxx.a
(这里是直接添加静态库项目源码的做法)
使用-force_load分别进行加载还是蛮方便的,如果有些函数加入了main函数使用all_load就相当麻烦了。
以上可以解决TencentOpenAPI.framework与ZbarSDK的冲突
如果两个静态库冲突的结构是相同的,可以考虑将两个静态库拆分出来进行合并。
查看文件的架构有哪些
$&lipo -info libzbar.a
Architectures in the fat file: libzbar.a are: armv7 (cputype (12)
cpusubtype (11)) i386&
将armv7解压出来
lipo libzbar.a -thin armv7 -output
libzbar-armv7.a
新建立一个文件夹出来存放解压的(.o)文件
$ mkdir armv7
$ cd armv7
将静态库中的文件解压
../libzbar-armv7.a
然后将另一个静态库根据以上的步骤做一遍,然后观察连个解压的静态库中,有那些是一样的就合并在一起,不过注意的是两个静态库冲突的(.o)文件必须一致,否则也会出现错误。
合并完后进行打包了
$ libtool -static -o ../libnew-armv7.a *.o
如果像在虚拟机也使用,进行相同的步骤后,将i386的架构合并再一起就可以了。
合并静态库
$ lipo -create -output lib.a&libnew-armv76.a
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。请教库冲突的导致的 duplicate symbol 链接错误_百度知道
请教库冲突的导致的 duplicate symbol 链接错误
我有更好的答案
CGFloat RadiansToDegrees(CGFloat radians) { return radians * 180: CGFloat DegreesToRadians(CGFloat degrees) { return degrees * M_PI / },而是下载下来做为项目的一部分; CGFloat MyRadiansToDegrees(CGFloat radians) { return radians * 180; M_PI: CGFloat MyDegreesToRadians(CGFloat degrees) { return degrees * M_PI &#47,跟其他的函数冲突了吧,不在使用cocoapods管理此库; 180.0; 180. 我的做法时.0,这样的: 将上面的函数名更改一下; }.0 / 可能是作为两个简单的函数; }; }.0 / M_PI您好, 然后修改源代码
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁& & 工程链接静态库的时候,通过删除class来解决重复符号(duplicate symbol)的错误& & 如果你在工程中使用静态库,并且指定了编译选项为-all_load(为了让Objective-C的类别加载正确),静态库中,你的工程包含了一样的class名字,或者跟其他静态库中,有相同的class名字。在链接静,肯定遇到过类似于这样的错误“duplicate symbol”错误。& & 例如,一个三方库(libProprietary.a),库中使用KissXML解析和生成XML,你的工程中内置一个静态库(libBitsAndBobs.a)也使用KissXML。如果你使用两个库,你将会得到KissXML 的duplicate symbol错误。& & 一个粗暴并且快捷的办法是,将相同的class名字从其中一个库中移除。下面将介绍一下怎么实现:大致步骤:& & 1.查看是否是fat的静态库& & 2.拆成armv6 和i386的两个静态库& & 3. 解出静态库中的目标文件(.o文件)& & 4. 删除多余的目标文件& & 5. 合成armv6或者i386的静态库& & 6.重新合成fat库。1、首先,我们需要看看静态库是否是一个“fat file”& & 意思是:是否包含了多个架构。你会发现很多iOS静态库是fat files,目的是让它们同时可以在真机和模拟器上运行。& & $ lipo -info libProprietary.a& & Architectures in the fat file: libProprietary.a are: armv6 i386& & 正如我们说的,这个库就是一个fat file(armv6 和i386两个架构)。2、我们使用的工具,可以分离fat 静态库为每一个架构一个静态库。& & 为了这么做。我们还需要使用lipo命令& & $ lipo -thin armv6 libProprietary.a -output libProprietary-armv6.a3、我们也可以用ar来看看静态库中的文件,将目标文件列出来& & $ ar -t libProprietary-armv6.a& & __.SYMDEF SORTED& & FOOBar.o& & DDXMLDocument.o& & DDXMLElement.o& & DDXMLElementAdditions.o& & DDXMLNode.o4、正如我们期望的那样,libProprietary.a 包含了FOOBar.o目标文件,我们在KissMXL中也有这样的目标文件。我们需要从静态库中解除目标文件,然后删除它,然后再组包成静态库文件。& & 首先,解包:& & $ mkdir libProprietary-armv6& & $ cd libProprietary-armv6& & $ ar -x ../libProprietary-armv6.a& & 现在,我们有一个包含目标文件的文件夹 libProprietary-armv6& & $ ls -1& & DDXMLDocument.o& & DDXMLElement.o& & DDXMLElementAdditions.o& & DDXMLNode.o& & FOOBar.o& & __.SYMDEF SORTED5、这个时候,将重复的.o文件删除,然后再重新组包:& & $ rm DDXML*.o& & $ libtool
-static *.o -output ../libProprietary-armv6.a& & 为了确认我们移除了目标文件,可以再次list一下;& & $ ar -t ../libProprietary-armv6.a& & __.SYMDEF SORTED& & FOOBar.o& & 至此,我们已经完成了拆分armv6架构的,还需要对i386的架构执行同样的过程。& & $ lipo -thin i386 libProprietary.a -output libProprietary-i386.a& & $ mkdir libProprietary-i386 && cd libProprietary-i386& & $ ar -x ../libProprietary-i386.a& & $ rm DDXML*.o& & $ libtool
-static *.o -output ../libProprietary-i386.a6、最后,我们需要重新把armv6和i386架构的静态库,组合成fat静态库& & lipo -create libProprietary-armv6.a libProprietary-i386.a -output libProprietary-noKissXML.a& & 如果,一切正确的话,你可以使用 libProprietary-noKissXML.a代替libProprietary.a了,并且不再有duplicate symbol的错误了。& & 原文地址/blog//avoiding-duplicate-symbol-errors-during-linking-by-removing-classes-from-static-libraries
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.003 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.002 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.002 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益

我要回帖

更多关于 pod duplicate symbol 的文章

 

随机推荐