架构 armv7 的重复符号

Posted

技术标签:

【中文标题】架构 armv7 的重复符号【英文标题】:duplicate symbols for architecture armv7 【发布时间】:2013-05-01 21:03:50 【问题描述】:

尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误。我该如何解决这个问题?

Ld /Users/pnawale/Library/Developer/Xcode/DerivedData/hub-afxxzaqisdfliwbzxbixsaifljcl/Build/Products/Debug-iphoneos/hub.app/hub normal armv7
    cd /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub
    setenv IPHONEOS_DEPLOYMENT_TARGET 5.0
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk -L/Users/pnawale/Library/Developer/Xcode/DerivedData/hub-afxxzaqisdfliwbzxbixsaifljcl/Build/Products/Debug-iphoneos -L/Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/ZBarSDK -L/Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/Infosound/Lib -L/Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/CrittercismSDK -L/Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub -L/Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/UserVoiceSDK-2.0.4 -L/Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/Libraries -F/Users/pnawale/Library/Developer/Xcode/DerivedData/hub-afxxzaqisdfliwbzxbixsaifljcl/Build/Products/Debug-iphoneos -F/Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub -filelist /Users/pnawale/Library/Developer/Xcode/DerivedData/hub-afxxzaqisdfliwbzxbixsaifljcl/Build/Intermediates/hub.build/Debug-iphoneos/hub.build/Objects-normal/armv7/hub.LinkFileList -dead_strip -ObjC -all_load -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=5.0 -lMPOAuthMobile -lsbjson-ios -framework LayarSDK -framework Social -framework AddressBook -framework AddressBookUI -framework UIKit -framework QuartzCore -framework Twitter -framework SystemConfiguration -framework Security -framework OpenAL -framework OpenGLES -framework MessageUI -framework MediaPlayer -framework Foundation -framework CoreGraphics -lc++ -framework CoreTelephony -framework CoreVideo -framework CoreMotion -framework CoreMedia -framework CoreLocation -framework CoreData -framework CoreAudio -framework CFNetwork -framework AVFoundation -framework AudioToolbox -lxml2 -liconv -lz -framework MobileCoreServices -lzbar -linfosound -lCrittercism_v3_4_6 -lUserVoice -o /Users/pnawale/Library/Developer/Xcode/DerivedData/hub-afxxzaqisdfliwbzxbixsaifljcl/Build/Products/Debug-iphoneos/hub.app/hub

duplicate symbol _jpeg_free_large in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemname.o)
duplicate symbol _jpeg_free_small in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemname.o)
duplicate symbol _jpeg_get_large in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemname.o)
duplicate symbol _jpeg_get_small in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemname.o)
duplicate symbol _jpeg_mem_available in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemname.o)
duplicate symbol _jpeg_mem_init in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemname.o)
duplicate symbol _jpeg_mem_term in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemname.o)
duplicate symbol _jpeg_open_backing_store in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemname.o)
duplicate symbol _jpeg_free_large in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemnobs.o)
duplicate symbol _jpeg_free_small in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemnobs.o)
duplicate symbol _jpeg_get_large in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemnobs.o)
duplicate symbol _jpeg_get_small in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemnobs.o)
duplicate symbol _jpeg_mem_available in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemnobs.o)
duplicate symbol _jpeg_mem_init in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemnobs.o)
duplicate symbol _jpeg_mem_term in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemnobs.o)
duplicate symbol _jpeg_open_backing_store in:
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemansi.o)
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jmemnobs.o)
duplicate symbol _main in:
    /Users/pnawale/Library/Developer/Xcode/DerivedData/hub-afxxzaqisdfliwbzxbixsaifljcl/Build/Intermediates/hub.build/Debug-iphoneos/hub.build/Objects-normal/armv7/main.o
    /Users/pnawale/Documents/Paresh/Yamaha_iPhone/Code/Final/hub/LayarSDK.framework/LayarSDK(jpegtran.o)
ld: 17 duplicate symbols for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

试试这个:***.com/a/42089897/3024579 【参考方案1】:

如果您不小心将#import .m 文件而不是.h 文件,就会发生这种情况!

【讨论】:

在两个不同的文件中声明常量时也可能发生 谢谢@Benjamin...你拯救了我的一天。谢谢。【参考方案2】:

通常,由于您的项目文件夹中的类和 xib 重复,会发生这种错误。例如,在我的项目中,我复制了一些类文件(.h/.m 文件)。您可以在target->Build phases->compile sources 下看到这些重复的类。

只需查看并删除额外的类。问题会解决的。

【讨论】:

同时查看这些讨论:***.com/questions/15460481/… & ***.com/questions/6429494/… 对我来说奇怪的是,除了一个案例之外,所有重复项都来自Layar.SDK 框架。另一个副本是main - 由 OP 的应用程序和 Layar 提供。我想知道 Layar.SDK 是否按预期方式使用?如果是这样,这看起来很像他们的狗粮,他们的支持论坛可能是一个很好的提问场所 - 毕竟,OP 每年为每个应用支付 2.5 万欧元。 如果我的项目有超过 500 个类怎么办? >.>; @BenLeggiero 的评论。 这也适用于架构 x86_64 的重复符号【参考方案3】:

发生在头文件中的静态变量(头文件包含在多个实现文件中)。

【讨论】:

为了帮助像我这样一开始不理解这一点的人:您在一个 .h 文件中声明了非常量变量,并且该文件包含在多个位置。你不能这样做。要解决此问题,请使用 extern 将静态(非 const)变量更改为声明,然后仅在包含 .h 的 .cpp 文件之一中定义它们 这是我的问题。奇怪的是,它只发生在仿真中——在设备上构建得很好。 (???) 这是我的问题。感谢您的建议,否则我永远不会发现。 +1【参考方案4】:

我收到此错误是因为我使用了 Xcode 推荐的警告标志。 GCC_NO_COMMON_BLOCKS = YES 是导致问题的原因。将其设置回 NO 为我修复了它。

【讨论】:

为我节省了大约 4 个小时...谢谢! 这实际上也救了我。谢谢。 似乎 Xcode 9 更改了这个设置,这破坏了我的构建。感谢您发布此信息。救命稻草!【参考方案5】:

如果您有循环导入,也可能会导致此错误...假设您有 VC1.hVC2.hVC3.h

会导致错误的例子:(都是.h文件)

如果 VC2 导入 VC1 并且 VC1 导入 VC2 如果 VC1 导入 VC2,VC2 导入 VC3,VC3 导入 VC1

解决方案:

.m 中导入而不是.h 如果.h 需要该类使用@class (nameOfClass); 而不是导入.h

使用时要小心#import,只导入你需要的。

【讨论】:

我以为#import ensures that a file is only ever included once so that you never have a problem with recursive includes。另外,你到底为什么要导入.m?! @BenC.R.Leggiero 我要在 .m 中导入你的 .h ......并且不止一次导入不是问题......问题是当有循环引用时/ import 使其成为无限循环的导入,无法编译。 我是说 #import 应该不可能循环/无限导入。 @BenC.R.Leggiero 我认为你是对的,我只是试图复制错误,但我做不到。这些年来,编译器似乎变得更好了。如果我能复制错误,我会做任何更新。【参考方案6】:

如果您使用Cordova iOS 4.5.0,请小心,可能会发生此类错误

duplicate symbol _OBJC_METACLASS_$_CDVLogger in:
   /Users/toto/Library/Developer/Xcode/DerivedData/imp-hkzujazvkracgugyxunzwnzpeiqx/Build/Intermediates/imp.build/Debug-iphoneos/imp.build/Objects-normal/armv7/CDVLogger.o
   /Users/toto/Library/Developer/Xcode/DerivedData/imp-hkzujazvkracgugyxunzwnzpeiqx/Build/Products/Debug-iphoneos/libCordova.a(CDVLogger.o)

ld: 2 duplicate symbols for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这可能是由于使用了cordova-plugin-console,这在Cordova iOS 4.5.0 中不再有用(并且也破坏了构建!)。

修复它

cordova plugin remove cordova-plugin-console

见参考:https://cordova.apache.org/announcements/2017/09/08/ios-release.html

【讨论】:

【参考方案7】:

我曾经遇到过这个问题。原因是我将实现主体中声明的一些方法和变量从一个类复制到另一个类。所以重命名这些方法并将这些变量移动到接口声明区域 => 解决了。

【讨论】:

【参考方案8】:

唯一对我有用的是删除我的 Podfile,然后重新安装它。

确保在运行以下命令之前复制所有原始 pod:

$ sudo gem install cocoapods-deintegrate

$ sudo gem install cocoapods-deintegrate cocoapods-clean

$ rm -rf ~/Library/Developer/Xcode/DerivedData

$ pod deintegrate

$ pod clean

$ rm Podfile

$ pod cache clean --all

$ pod init

// next add all the original pods to the new Podfile

$ pod install

【讨论】:

【参考方案9】:

我看到了同样的问题,但使用了不同的库。修复如下:

Target -> Build Phases -> Linked Binary With Libraries

确保包含的库有意义。就我而言,我的项目有 libPods*.a(我正在使用 CocoaPods 进行依赖管理),但也有一些库包含在我的 pod 共享库中,这导致了重复。

【讨论】:

您是否必须从链接二进制文件中删除 libPods*.a?您是否将它们从项目中完全删除?【参考方案10】:

我刚刚修复了这个错误。我让 CocoaPods 安装了一些框架(AWS、SDWebImage、AFNetworking。我手动拖入了 2 个框架,Facebook 和 ImageIO。我的大部分“重复符号”错误都被 Facebook 类捕获。我删除了框架并将其添加到 Podfile 中。一定是 Facebook 要求的库中有错误或重复。

【讨论】:

【参考方案11】:

我的问题是……奇怪。我不确定它是怎么发生的,但在某个时候,Xcode 决定在其.pbxproj 文件中再包含一些古老的.m 文件。我发现它的唯一方法是比较我在 git 中的更改,查看构建第一次失败的代码版本。

只需删除此行即可解决我的问题:

【讨论】:

相同。在 git merge 之后 - 有两个不同的标题具有相同的哈希值。只需使用旧哈希删除一个。旧的怎么取出来?它通常是所有列表中的一个。【参考方案12】:

我的 Xcode 中有重复的文件。物理上有一个 m 文件和一个 h 文件。但是在项目中它加倍导致编译源重复。 删除重复的m和h文件后问题解决了。

【讨论】:

【参考方案13】:

这是因为 iPhone 模拟器有重复的 .h 和 .m 引用。我为这个错误奋斗了好几个小时。

我的解决方案很简单。我将项目复制到我的笔式驱动器并从计算机内存中删除。

打开一个新项目,复制故事板并添加 .h &.m 文件。通过在故事板视图中再次选择类修复了一些错误..

【讨论】:

【参考方案14】:

我也有重复的符号。我刚刚重命名了程序 (app -> app1, app2) 和相关的字段 app.XXX -> app1.XXX 。并且成功了!

参见:(在 .m 文件中)

AppDelegate* app1;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
        app1 = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    
    return self;


(...)

- (int) getLimit

    if (app1.product2buyed)
        return MAXID;
    else if (app1.product1buyed)
        return 70;
    else
        return 10;

【讨论】:

【参考方案15】:

请检查您是否多次添加了任何框架,如果多次添加则删除所有框架,然后再次拖放。

希望这能解决您的问题。 快乐编码。

【讨论】:

【参考方案16】:

您可能安装了类似的插件。

我正在使用 Cordova,并且还出现了几个重复符号错误。我已经安装了两个类似的插件:

cordova 插件电子邮件编辑器 cordova 插件电子邮件

通过使用...删除“cordova 插件电子邮件”来修复它

cordova plugin remove cordova-plugin-email

在那之后我跑了……

cordova prepare
cordova build ios

现在我的 xCode 构建运行起来就像一个魅力!呜呜呜!

【讨论】:

以上是关于架构 armv7 的重复符号的主要内容,如果未能解决你的问题,请参考以下文章

ld:架构 armv7 的 1 个重复符号

iOS - 架构 armv7 的 2 个重复符号

错误:更改核心数据模型后架构 armv7 的重复符号

Braintree iOS SDK 和 Card I/O iOS SDK 之间的冲突:架构 armv7 的重复符号

架构 armv7s 的未定义符号:iPhoneExtAudioFileConvertTest

静态库链接错误。架构 armv7s 的未定义符号