关于第三方库 duplicate symbol 的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
njuxjy
V2EX    iDev

关于第三方库 duplicate symbol 的问题

  •  
  •   njuxjy 2014-04-03 22:38:54 +08:00 5043 次点击
    这是一个创建于 4216 天前的主题,其中的信息可能已经有所发展或是发生改变。
    两个库,一个AFNetworking,一个国外某个静态库暂且叫libA.a,AFNetworking里的AFHttpClient.h声明了常量:extern NSString * const AFNetworkingReachabilityDidChangeNotification; AFHttpClient.m中给出了定义:NSString * const AFNetworkingReachabilityDidChangeNotification = @"com.alamofire.networking.reachability.change";
    和libA.a一起编译的时候竟然说AFNetworkingReachabilityDidChangeNotification有duplicate symbol,libA.a中的某个类里竟然有个也叫AFNetworkingReachabilityDidChangeNotification的常量的定义(虽然看不到实现文件),这下好了,我又不想去改AFNetworking的代码(虽然这样可以避免重复定义问题),又想把问题解决,各位有好办法没?
    11 条回复    1970-01-01 08:00:00 +08:00
    dorentus
        1
    dorentus  
       2014-04-03 23:13:38 +08:00   1
    应该是没啥好方法,最好的方法就是不用这个 libA.a
    pright
        2
    pright  
       2014-04-03 23:16:26 +08:00
    这命名也太长了
    qdvictory
        3
    qdvictory  
       2014-04-03 23:19:15 +08:00 via iPhone   1
    直接重名的可能性不大,估计是liba.a同样编译了afnetworking,何不尝试去掉自己的afnetworking改用liba的
        4
    alexrezit  
       2014-04-04 05:29:02 +08:00 via iPhone
    @qdvictory
    同. OC 没有 namespace 的概念这么随意打包 .a 实在烦人啊.
    alexrezit
    njuxjy
        5
    njuxjy  
    OP
       2014-04-04 07:54:19 +08:00
    @qdvictory 用lipo和ar查看了libA.a的内部结果,发现木有自带AFNetworking,因此怀疑他仅仅用了相同变量名而已。。
    njuxjy
        6
    njuxjy  
    OP
       2014-04-04 07:55:05 +08:00
    @qdvictory 结构,not结果
    qdvictory
        7
    qdvictory  
       2014-04-04 08:25:39 +08:00 via iPhone
    @njuxjy 那真的很尴尬,这么长都重名。
    jimneylee
        8
    jimneylee  
       2014-04-04 09:37:24 +08:00   1
    名字虽长,其实就是前面两个字母巧合,老外命名规范,所以巧合几率确实比较大的,换作我们国内开发者(包括我:)),即使前面都是AF,后面的命名五花八门,绝对不会重复。吐槽下。
    不过这个问题确实很尴尬,我也遇到过,老早之前因为要加renren分享,静态库添加到Three20工程中集成发生冲突,发现他们竟然把SBJSon库打到他们静态库,而且两个SBJson版本不一样,蛋疼,只能修改Three20源码兼容,再后来看的不顺眼果断在分享功能去掉renren分享。。。
    delphiqin
        9
    delphiqin  
       2014-04-04 11:41:47 +08:00
    AFNetworking 你不是有源码么,用 refactor->rename 把 AFNetworking 里的 AFNetworkingReachabilityDidChangeNotification 改个名不行么
    njuxjy
        10
    njuxjy  
    OP
       2014-04-04 11:50:22 +08:00
    @delphiqin 可维护性考虑不碰第三方代码
    krafttuc
        11
    krafttuc  
       2014-04-04 13:44:42 +08:00   1
    暂时无解,除非你把AFNetworking对外暴露的常量和接口前再加前缀。__不是好的实践__

    此外,这个静态库的作者确实没做好,没有考虑到库的client也会用AFNetworking。在自己的库里引入第三方库,就应当在第三方库前加自己的前缀。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1477 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 16:43 PVG 00:43 LAX 09:43 JFK 12:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86