【发布时间】:2013-01-24 04:13:06
【问题描述】:
我的项目编译为armv7结构时出现这个错误:
duplicate symbol _MD5 in:
/Users/User1/Documents/codes/ProgramList1/libraries/armv7/lib/libcrypto.a(md5_one.o)
/Users/User1/Documents/codes/ProgramList1/ProgramList1/ADs/AdsMoGoLib/AdNetworkLibs/AdMob_SDK_621/libGoogleAdMobAds.a(GADGestureCFiles.o)
ld: 1 duplicate symbol for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我用谷歌搜索了这个问题,我读到有人建议将两个库合并为一个以消除重复的符号,如下所示:
> lipo libGoogleAdMobAds.a -thin armv7 -output libGoogleAdMobAds-armv7.a
> mkdir armv7
> cd armv7/
> ar -x ../libGoogleAdMobAds-armv7.a
> ar -x ../libcrypto.a
> libtool -static -o ../libcrypto-googlead-armv7.a *.o
最后,我回到项目,从链接标志中删除 libGoogleAdMobAds.a 和 libcrypto.a 并将新的组合库添加到项目中。
但我仍然遇到同样的错误:
duplicate symbol _MD5 in:
/Users/User1/Documents/codes/ProgramList1/libraries/armv7/lib/libGoogleAdMobAds-armv7.a(md5_one.o)
/Users/User1/Documents/codes/ProgramList1/ProgramList1/ADs/AdsMoGoLib/AdNetworkLibs/libGoogleAdMobAds-armv7.a(GADGestureCFiles.o)
ld: 1 duplicate symbol for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如您所见,同一个库中有重复的符号。我现在该怎么办?
【问题讨论】:
-
您是否在项目/目标构建设置的其他链接器标志中设置了 all_load 标志?
-
是的,我的其他链接器标志是这样的:-all_load -ObjC -lxml2 -levent -lssl -lcurl -l....
-
顺便说一句,这个错误只在iOS(armv7)构建时出现,在模拟器(i386)构建时,项目构建成功。
-
感谢 calvinBhai,从链接标志中删除 all_load 后,它现在可以工作了。我还发现了这个stackoverflow.com/a/12737840/739063
-
查看我在答案中发布的链接。你会更好地理解为什么会出现这个问题。
标签: ios linker compiler-errors