更新到 Parse 1.8.4 pod 后出现 Apple Mach-O Linker 错误
Apple Mach-O Linker error after updating to Parse 1.8.4 pod
更新到最新的 Parse pod (1.8.4) 后,我仅在为设备构建时收到 Apple Mac-O 链接器错误。模拟器工作正常
Ld /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos/ParseCrashReporting.framework/ParseCrashReporting normal arm64
cd "/Users/mile/Projects/Nanusim Xcode/nanusim_obejctiveC/Nanuism/Pods"
export IPHONEOS_DEPLOYMENT_TARGET=8.4
export 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 arm64 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk -L/Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos -L/Users/mile/Projects/Nanusim\ Xcode/nanusim_obejctiveC/Nanuism/Pods/ParseCrashReporting -F/Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos -filelist /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Intermediates/Pods.build/Debug-iphoneos/ParseCrashReporting.build/Objects-normal/arm64/ParseCrashReporting.LinkFileList -install_name @rpath/ParseCrashReporting.framework/ParseCrashReporting -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -dead_strip -ObjC -lParseCrashReportingLib -lsqlite3 -lstdc++.6 -lz -framework CFNetwork -framework Foundation -framework Security -framework SystemConfiguration -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=8.4 -framework Bolts -framework CFNetwork -framework Foundation -framework Parse -framework Security -framework SystemConfiguration -single_module -compatibility_version 1 -current_version 1.8.4 -Xlinker -dependency_info -Xlinker /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Intermediates/Pods.build/Debug-iphoneos/ParseCrashReporting.build/Objects-normal/arm64/ParseCrashReporting_dependency_info.dat -o /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos/ParseCrashReporting.framework/ParseCrashReporting
ld: 14 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
请查看 findObjectsInBackgroundWithBlock 方法的签名。将 AnyObject 更改为 PFObject 应该可以解决问题。
这是 ParseCrashReporting
库的问题。 1.8.2 版本没有这个问题。在撰写本文时,该问题存在于 1.8.3、1.8.4 和 1.8.5(当前)中。
如果您可以从 6.4 升级到 Xcode 7,则此问题不会出现。
如果您仍然必须使用 6.4,这似乎与在测试目标中包含 Pods.xcconfig 以及在为设备构建时有关。
具体来说,link错误是:
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(GTMLogger.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(GTMLogger.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(HTTPMultipartUpload.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(HTTPMultipartUpload.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(uploader.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(uploader.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(BreakpadController.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(BreakpadController.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(ParseCrashReporting.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(ParseCrashReporting.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReportingAnalytics.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReportingAnalytics.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReport.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReport.o)
ld: 14 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
都和libParseCrashReportingLib.a
有关
我已在此处 https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/271 提交了 Parse 问题,其中包括 link 示例项目以重现它。不过步骤很简单:
- 在Xcode6.4新建一个单一视图iOS应用项目
创建一个 Podfile
其中包括 ParseCrashReporting
:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
pod 'ParseCrashReporting', '~> 1.8'
执行一个pod install
- 打开生成的
xcworkspace
并将 Pods.xcconfig 添加到测试目标。
- 为设备构建。
- 构建失败并出现上述针对测试目标的 linker 错误。
更新到最新的 Parse pod (1.8.4) 后,我仅在为设备构建时收到 Apple Mac-O 链接器错误。模拟器工作正常
Ld /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos/ParseCrashReporting.framework/ParseCrashReporting normal arm64
cd "/Users/mile/Projects/Nanusim Xcode/nanusim_obejctiveC/Nanuism/Pods"
export IPHONEOS_DEPLOYMENT_TARGET=8.4
export 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 arm64 -dynamiclib -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk -L/Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos -L/Users/mile/Projects/Nanusim\ Xcode/nanusim_obejctiveC/Nanuism/Pods/ParseCrashReporting -F/Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos -filelist /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Intermediates/Pods.build/Debug-iphoneos/ParseCrashReporting.build/Objects-normal/arm64/ParseCrashReporting.LinkFileList -install_name @rpath/ParseCrashReporting.framework/ParseCrashReporting -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -dead_strip -ObjC -lParseCrashReportingLib -lsqlite3 -lstdc++.6 -lz -framework CFNetwork -framework Foundation -framework Security -framework SystemConfiguration -fobjc-arc -fobjc-link-runtime -miphoneos-version-min=8.4 -framework Bolts -framework CFNetwork -framework Foundation -framework Parse -framework Security -framework SystemConfiguration -single_module -compatibility_version 1 -current_version 1.8.4 -Xlinker -dependency_info -Xlinker /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Intermediates/Pods.build/Debug-iphoneos/ParseCrashReporting.build/Objects-normal/arm64/ParseCrashReporting_dependency_info.dat -o /Users/mile/Library/Developer/Xcode/DerivedData/Nanuism-ezuxcvwcbtlytwdpwrmzcxghttsw/Build/Products/Debug-iphoneos/ParseCrashReporting.framework/ParseCrashReporting
ld: 14 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
请查看 findObjectsInBackgroundWithBlock 方法的签名。将 AnyObject 更改为 PFObject 应该可以解决问题。
这是 ParseCrashReporting
库的问题。 1.8.2 版本没有这个问题。在撰写本文时,该问题存在于 1.8.3、1.8.4 和 1.8.5(当前)中。
如果您可以从 6.4 升级到 Xcode 7,则此问题不会出现。
如果您仍然必须使用 6.4,这似乎与在测试目标中包含 Pods.xcconfig 以及在为设备构建时有关。
具体来说,link错误是:
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(GTMLogger.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(GTMLogger.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(HTTPMultipartUpload.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(HTTPMultipartUpload.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(uploader.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(uploader.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(BreakpadController.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(BreakpadController.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(ParseCrashReporting.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(ParseCrashReporting.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReportingAnalytics.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReportingAnalytics.o)
duplicate symbol _llvm.cmdline in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReport.o)
duplicate symbol _llvm.embedded.module in:
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReporter.o)
[redacted]/ParseCrashReporting/libParseCrashReportingLib.a(PFCrashReport.o)
ld: 14 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
都和libParseCrashReportingLib.a
我已在此处 https://github.com/ParsePlatform/Parse-SDK-iOS-OSX/issues/271 提交了 Parse 问题,其中包括 link 示例项目以重现它。不过步骤很简单:
- 在Xcode6.4新建一个单一视图iOS应用项目
创建一个
Podfile
其中包括ParseCrashReporting
:source 'https://github.com/CocoaPods/Specs.git' platform :ios, '8.0' pod 'ParseCrashReporting', '~> 1.8'
执行一个
pod install
- 打开生成的
xcworkspace
并将 Pods.xcconfig 添加到测试目标。 - 为设备构建。
- 构建失败并出现上述针对测试目标的 linker 错误。