【问题标题】:XCode5 simulator: unknown option character `X' in: -XlinkerXCode5 模拟器:-Xlinker 中的未知选项字符“X”
【发布时间】:2013-11-10 16:57:10
【问题描述】:

我目前被链接器错误阻止,该错误仅发生在 XCode5(XCode4 编译良好)和仅在模拟器上(普通设备编译良好)。

当我尝试编译时,我得到一个“Apple Mach-O Librarian Error”,它给了我下面的文字墙:

Libtool build/DevOnly-iphonesimulator/libCozi\ Common\ Code.a normal i386 cd /Users/jr/ios/app/iCozi setenv IPHONEOS_DEPLOYMENT_TARGET 4.3 setenv PATH "/Applications/XCode5/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/XCode5/Xcode.app/Contents/Developer/usr/bin:/usr/bin: /bin:/usr/sbin:/sbin" /Applications/XCode5/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -static -arch_only i386 -syslibroot /Applications/XCode5/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -L/Users/jr/ios/app/iCozi/build/DevOnly-iphonesimulator -L/Users/jr/ios/app/iCozi/../../ext/aiMatch/SASIA_iOS_SDK-iphonesimulator -L/Users/jr/ios/app/iCozi/../../ext/GoogleAdsSDK-iphone-v3.1/Library -L/Users/jr/ios/app/iCozi/../../ext /Google\ Analytics\ SDK/Library -L/Users/jr/ios/app/iCozi/../../ext/AdMarvel_iOS_SDK_2_9_1/AdMarvelSDK -L/Users/jr/ios/app/iCozi/../.. /ext/libComScore-1.1107.12 -L/Users/jr/ios/app/iCozi/../../ext/TestFlightSDK -L/Users/jr/ios/app/iCozi/../../ext /mBlox-SDK/Debug-universal -L/Users/jr/ios/app/iCozi/../../ext/mBlox-SDK/Release-universal -L/Users/jr/ios/app/iCozi/。 ./../ext/FacebookSDK/FacebookSDK.framework/Versions/A -L/Users/jr/ios/app/iCozi/../../ext/GoogleConversionTrackingSDK -L/Users/jr/ios/app/iCozi/../../ext/TapjoyAdvertiserSDK/TapjoyAdvertiserLibrary -L/Users/jr/ios/app/iCozi/../../ext/MobileAppTracker.framework/Versions/A -filelist /Users/jr/ios/app/iCozi/build/iCozi.build/DevOnly-iphonesimulator/Cozi\ Common\ Code.build/Objects-normal/i386/Cozi\ Common\ Code.LinkFileList -all_load -ObjC -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/jr/ios/app/iCozi/build/iCozi.build/DevOnly-iphonesimulator/Cozi\ Common\ Code.build/Cozi\ Common\ Code.xcent -framework 移动应用追踪器 /Applications/XCode5/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/usr/lib/libz.dylib -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -framework Security -framework MobileCoreServices -framework CFNetwork -framework SystemConfiguration -weak_framework MessageUI -framework QuartzCore /Users/jr/ios/ext/three20/Build/Products/Release-iphonesimulator/libThree20.a /Users/jr/ios/ext/three20/Build/Products/Release-iphonesimulator/libThree20UI.a /Users/jr/ios/ext/three20/Build/Products/Release-iphonesimulator/libThree20UINavigator.a /Users/jr/ios/ext/three20/Build/Products/Release-iphonesimulator/libThree20UICommon.a /Users/jr/ios/ext/three20/Build/Products/Release-iphonesimulator/libThree20Style.a /Users/jr/ios/ext/three20/Build/Products/Release-iphonesimulator/libThree20Network.a /Users/jr/ios/ext/three20/Build/Products/Release-iphonesimulator/libThree20Core.a -framework CoreLocation -weak_framework MediaPlayer -weak_framework iAd -framework AVFoundation -framework AudioToolbox -lGoogleAnalytics /Applications/XCode5/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/usr/lib/libsqlite3.0.dylib -weak_framework EventKit -weak_framework EventKitUI -lTestFlight -framework comScore -framework MDS-SDK-PhoneGap -lMDSCore -framework FacebookSDK -lGoogleConversionTracking /Users/jr/ios/ext/TapjoyAdvertiserSDK/TapjoyAdvertiserLibrary/TapjoyAdvertiserLibrary.a /Users/jr/ios/ext/FacebookSDK/FacebookSDK.framework/Versions/A/FacebookSDK /Users/jr/ios/ext/MobileAppTracker.framework/Versions/A/MobileAppTracker -o /Users/jr/ios/app/iCozi/build/DevOnly-iphonesimulator/libCozi\ Common\ Code.a

/Applications/XCode5/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool: 未知选项字符“X”在:-Xlinker 用法: /Applications/XCode5/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -static [-] 文件 [...] [-filelist listfile[,dirname]] [-arch_only arch] [-sacLT] 用法: /Applications/XCode5/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool -dynamic [-] file [...] [-filelist listfile[,dirname]] [-arch_only arch] [-o output] [-install_name name] [-compatibility_version #] [-current_version #] [-seg1addr 0x#] [-segs_read_only_addr 0x#] [-segs_read_write_addr 0x#] [-seg_addr_table ] [-seg_addr_table_filename ] [-all_load] [-noall_load] 命令 /Applications/XCode5/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/libtool 退出代码 1 失败

问题的根源似乎是“-Xlinker 中的未知选项字符 `X'”,但 Google 并没有为该错误提供太多帮助:https://www.google.com/search?q=%22%60X%27+in%3A+Xlinker%22

“XLinker”在上面的混乱中出现了四次(“ . . . -all_load -ObjC -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/jr/ios/app/iCozi/build/iCozi.build /DevOnly-iphonesimulator/Cozi\ Common\ Code.build/Cozi\ Common\ Code.xcent . . . ")

只是为了笑,我尝试从“Cozi Common Code”目标名称中删除空格,但这没有帮助。

同样,这在 XCode4 模拟器上编译得很好,在 XCode5 中编译得很好,可以在物理设备上运行,包括 iPod 和 iPad,但是 XCode5 中的每个模拟器都有这个问题(iPhone/iPod/iPad,都正常和视网膜,在 iOS5/iOS6/iOS7 上)。

我真的很感谢任何可以帮助我了解这一点的人。谢谢!

【问题讨论】:

  • 你试过iOS模拟器>重置内容和设置吗?
  • @NikosM。是的,我刚试过。没有运气:(
  • 你检查你的构建设置是否有任何异常(比如链接器选项中的 X 字符:-))
  • @gWiz 我确实查看了我所有的链接器选项,并没有看到任何可疑的东西
  • 您正在编译一个静态库 (.a),同时指定权利;这似乎是这里的问题。您可能有一个继承设置,它为模拟器指定它而不为设备指定它。它几乎像泥一样清澈。

标签: ios iphone objective-c xcode xcode5


【解决方案1】:

FWIW,如果“代码签名权利”构建设置被错误地设置为静态库构建目标,那么 Xcode 7.3.1 上也可能出现这个确切的错误,但它并不真正适用。

【讨论】:

  • 为此 +1。这对我有用。我不小心将 .entitlements 文件添加到我的静态库构建目标中,导致出现 Libtool 错误。
【解决方案2】:

我还遇到了Apple Mach-O Librarian Error。但在检查了我的构建设置后,我发现 myProjectPodsCode Signing entitlement 都是空的。

由于可能是静态库的问题,我只是将 Pods-myExtensionMach-O type 设置从 static library 更改为 Dynamic library 并发现它有效!

Mach-O type 可以在 Pods-myExtension -> 构建设置 -> 链接中找到。

希望对你有帮助:)

【讨论】:

    【解决方案3】:

    出于某种原因,我的 pods 文件夹中的文件名中有一个带有“+”的文件。 删除了,效果很好

    【讨论】:

      【解决方案4】:

      不是最终解决方案,但就我而言,这是因为我试图在这个 pod 中使用“ReactiveCocoa”:

      pod 'ReactiveCocoa', '3.0.0-alpha.1'

      并且它自动安装了“LlamaKit”,你在使用 ReactiveCocoa 时不一定需要...

      所以首先我删除了 podfile,运行“pod install”。 然后删除“Podfile.lock”文件(与您的项目在同一文件夹中)。

      然后使用了这个 pod:

      pod 'ReactiveCocoa'

      并再次运行“pod install”。 清理项目,运行,祝你好运。

      【讨论】:

        【解决方案5】:

        首先检查您为调试构建的方案(产品 -> 方案 -> 管理方案,然后选择目标并按编辑) 转到构建设置(在项目和目标中),找到代码签名并在配置文件中的调试中更改为自动,在代码签名身份中的调试中不要代码签名。 它帮助了我,希望它也能帮助其他人)

        【讨论】:

          【解决方案6】:

          要解决此问题,请更改架构以在模拟器中调试,这是因为您已选择发布。

          【讨论】:

            【解决方案7】:

            为了了解错误,您必须了解该命令试图做什么。

            在这种情况下,它使用的是Libtool,它是libtool 的略微改动版本。在命令行中指定了一些选项,但我们要查找的是目标文件,这是作为 -o 选项传入的,参数是 /Users/jr/ios/app/iCozi/build/DevOnly-iphonesimulator/libCozi\ Common\ Code.a,以及我们的库类型重新生成,在本例中为-static。这两个选项一起明确声明您正在制作静态库存档。

            因为您正在制作一个静态库存档,所以您实际上正在做的唯一一件事就是获取 .o 文件和可能的 .a 文件并将它们转换为另一个 .a 文件。这可以大致等同于从一组文件 (.o) 和其他 .zip 文件 (.a) 的内容中创建一个 .zip 文件。制作此存档时您可以做的事情很少,例如,在构建静态存档时您无法指定需要隐式链接的库,您无法指定您将需要权利。

            libtool 正在抱怨,因为它不理解正在用于传入的静态库的选项。在这种情况下,选项是:

            -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/jr/ios/app/iCozi/build/iCozi.build/DevOnly-iphonesimulator/Cozi\ Common\ Code.build/Cozi\ Common\ Code.xcent
            

            这些是您尝试链接权利文件时出现的选项,这意味着某些选项指定使用权利文件。在这种情况下,您自己找到了正确的解决方案,即删除project settings -> Code Signing -> Code Signing Entitlements -> DevOnly 中指定的权利文件。

            【讨论】:

            • 叹息。或者,与其试图理解这个问题,不如牺牲一只鸡和/或删除派生的数据/偏好/任何东西,并希望最好。我对这里给出的一些答案感到非常惊讶。
            • 获得赏金。非常感谢! @quellish 他解锁了我们,所以他得到了赏金。如果您知道更好的答案,我希望您已发布它!
            • 感谢您的深入解释。
            【解决方案8】:

            我遇到了同样的问题,我的解决方法是在libtool的命令行中删除不支持的选项“-Xliner”(实际上我认为这个选项应该是libtool支持的,如libtool手册中​​所述在 gnu 中。可能是 xcode 在 libtool 中禁用它?)

            要删除此选项,我首先尝试找出生成它的设置。在我这边,它是代码签名。我使用代码签名“iOS Distribution”构建了项目,而与此签名相对应的身份也存在于钥匙串中。这将导致构建工具读取此标识并尝试执行类似为 libtool 生成额外链接选项的操作。

            要关闭它,我将签名更改为“iOS 开发人员”。而且我认为删除对应的身份也可以。

            希望我的解决方案对您有所帮助。

            【讨论】:

              【解决方案9】:

              我对这个错误的第一反应是它是一个错误警报。如果我是你,我会相应地进行一些故障排除并清理 Xcode、项目和模拟器设置等。

              尝试删除 Xcode 的首选项文件(从公共库和用户库中)并重新启动 Xcode -

              /库/首选项

              com.apple.dt.Xcode

              /Users/YourUsername/Library/Preferences(我有以下 3 个与 Xcode 相关的文件)

              com.apple.dt.Xcode.plist

              com.apple.dt.Xcode.LSSharedFileList.plist

              com.apple.dt.Xcode.plist.BoGEJ0T

              Alternatively - 尝试在其他机器上构建项目(或切换到同一机器上的其他用户)。

              【讨论】:

              • 感谢您的建议!我的同事在他的机器上有完全相同的错误消息,所以我不认为 xcode 设置是问题所在。我确实尝试关闭 xcode 并杀死您描述的所有 xcode 首选项文件,但是当我打开 xcode、清理并重新编译时,问题仍然存在。
              • 然后我怀疑,.xcodeproj 文件已损坏。如果容易的话,然后创建新/新项目并在那里拉入源和资源文件。如果没有,则在 xcodeproj 包/文件上“显示包内容”并在 textedit 中打开内容文件并注意一些“X”等。
              • 我认为“X”实际上可能指的是“XLinker”?我一直在查看我的项目文件中的所有内容,以寻找流浪 X 的所有内容,但没有成功。创建一个新的项目文件会很痛苦,而且无论如何,如果 xcodeproj 文件损坏,该项目似乎不太可能编译到普通设备上。
              • xcodeproj 内容文件是一种 xml 文件,因此与模拟器相关的标签可能已损坏。因此,编译器在针对模拟器时会抱怨。无论如何,祝一切顺利,我现在要走了。
              • 是的,我仍然可以加载 Xcode4 并为该平台上的模拟器编译它,所以我认为如果项目文件有一个特定于模拟器的损坏,它一定也是特定于 xcode5 的!谢谢你的想法。 . .
              猜你喜欢
              • 2014-09-24
              • 1970-01-01
              • 1970-01-01
              • 2014-07-24
              • 2020-08-04
              • 1970-01-01
              • 2019-12-23
              • 2017-11-19
              • 2016-07-19
              相关资源
              最近更新 更多