架构 armv7 的重复符号

49

在我的现有应用程序中尝试使用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)

试试这个:http://stackoverflow.com/a/42089897/3024579 - Alok
16个回答

123

如果您意外地导入了.m文件而不是.h,就会发生这种情况!


13
当你在两个不同的文件中声明一个常量时,也可能会发生这种情况。 - Benjamin

88

通常情况下,这种错误是由于在您的项目文件夹中存在重复的类和xib而导致的。例如,在我的项目中,我有一些类文件被复制了(.h/.m文件)。您可以在目标->构建阶段->编译源下看到这些重复的类。

只需查找并删除多余的类即可解决问题。


1
还要查看以下讨论:https://dev59.com/X2_Xa4cB1Zd3GeqP4sN5 和 https://dev59.com/WGw15IYBdhLWcg3wu-M9 - Vishal
我觉得奇怪的是,在除了一个案例之外,所有重复项都来自于Layar.SDK框架。另一个重复项是main - 这是由OP的应用程序和Layar提供的。我想知道Layar.SDK是否被按照预期使用?如果是这样,这非常像是他们的内部测试,他们的支持论坛可能是一个很好的地方去问 - 毕竟,OP每年为每个应用程序支付他们2.5k欧元。 - marko
4
如果我的项目有500个以上的类,会怎样?>.>; - Ky -
@BenLeggiero的评论。 - Daniel Barde
这对于架构x86_64的重复符号也适用。 - vofili

52
在头文件中声明静态变量时(该头文件被多个实现文件包含时),可能会出现问题。

6
为了帮助像我一样起初不理解这个的人:你在一个.h文件中声明了非常量变量,并且在多个地方包含了该文件。这是不允许的。为了解决问题,将你的静态(非常量)变量改为使用extern进行声明,然后在只包含该.h文件的一个.cpp文件中定义它们即可。 - Matthew Herbst
这是我的问题。奇怪的是它只在仿真中发生 - 在设备上构建得很好。(???) - Gabriel Jensen
1
这是我的问题。感谢您的建议,否则我永远不会发现它。+1 - Sev

19

我之前遇到了这个错误,是因为我使用了Xcode推荐的警告标志。GCC_NO_COMMON_BLOCKS = YES导致了这个问题的出现。将其设置回NO就解决了问题。


节省了我大约4个小时的时间...谢谢! - user4200570
这实际上也帮了我大忙。谢谢。 - Nauman Aslam
看起来Xcode 9更改了这个设置,导致我的构建失败。感谢您发布这个信息。救星! - Chuck Krutsinger

7

如果你正在使用 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 iOS 4.5.0的cordova-plugin-console插件,而且会导致构建失败。

要解决这个问题:

cordova plugin remove cordova-plugin-console
请参阅: https://cordova.apache.org/announcements/2017/09/08/ios-release.html。该页面涉及与iOS相关的技术更新和发布公告。

7
这个错误也可能是由于循环导入引起的.... 假设你有VC1.hVC2.hVC3.h。 以下是会导致错误的示例(所有示例都是.h文件):
  • 如果VC2导入了VC1,而VC1又导入了VC2
  • 如果VC1导入了VC2,而VC2又导入了VC3,而VC3又导入了VC1
解决方案:
  • .m中导入,而不是在.h中导入
  • 如果.h需要使用该类,请使用@class (nameOfClass);而不是导入.h
使用#import时要小心,只导入所需内容。

我认为 #import 保证文件只被包含一次,这样你就不会遇到递归包含的问题。另外,为什么会导入一个 .m 文件呢?! - Ky -
1
@BenC.R.Leggiero 我本意是在 .m 文件中导入你的 .h 文件... 导入多次并不是问题... 问题在于当存在循环引用/导入时,会形成无限循环的导入,并且无法编译。 - user2387149
我想表达的是,使用#import应该不可能出现循环/无限导入。 - Ky -
1
@BenC.R.Leggiero 我认为你是对的,我刚试图复制这个错误,但我无法复制。看起来编译器在这些年里变得更好了。如果我能够复制这个错误,我会进行任何更新的。 - user2387149

4

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


3

我唯一有效的方法是删除我的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

2

我遇到了同样的问题,但是使用了不同的库。解决方法如下:

Target -> Build Phases -> Linked Binary With Libraries

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


你需要从链接二进制文件中删除libPods*.a吗?你完全从项目中删除了它们吗? - Trianna Brannon

1
我的问题很奇怪。我不确定是怎么发生的,但在某个时候,Xcode决定在它的.pbxproj文件中再次包含一些古老的.m文件。我找到它的唯一方法是通过比较git中的更改,查看构建第一次失败的代码版本。 只需删除这行就解决了我的问题: 一个git更改集的示例,其中一个文件被添加,零个被删除。

1
合并 Git 后,出现了两个具有相同哈希值的不同标题。只需删除旧哈希值的一个即可。如何确定哪个是旧的?通常在列表中只有一个。 - Nike Kov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,