【问题标题】:ld: building for iOS Simulator, but linking against dylib?ld:为 iOS 模拟器构建,但链接到 dylib?
【发布时间】:2014-05-30 07:23:53
【问题描述】:

我在为 Simulator 编译我的应用程序时遇到问题。在设备中运行完美,但一旦我尝试在模拟器中编译,我得到以下错误:

ld: building for iOS Simulator, but linking against dylib built for MacOSX file '/Applications/Xcode.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我在发布这个问题之前检查过,但是我在stackoverflow中找到的答案,喜欢运行这个,

export PATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xct‌oolchain/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:$PATH

问题在于 Xcode 5 将 gcc 替换为 clang 并添加了一个“-triple”选项,将 OSX 指定为目标。如果在两个 gcc 命令行上都传递“-miphoneos-version-min=7.0”,它就可以工作。如果将“--verbose”传递给 gcc,则可以看到 clang 命令行。还需要添加到 Xcode 5 的 PATH 以便 cmake 可以找到必要的工具:export PATH=/Applications/Xcode5-DP6.app/Contents/Developer/Toolchains/XcodeDefault.xct‌​oolchain/usr/bin:/Applications /Xcode5-DP6.app/Contents/Developer/usr/bin:$PATH 这些都不是官方的..但到目前为止对我有用。

我真的不明白如何做到这一点。请帮忙?

【问题讨论】:

  • 我猜你的问题是胖静态库问题。您需要为设备和模拟器编译静态库。 stackoverflow.com/questions/3520977/… 这个链接可能会有所帮助。另外你需要搜索静态脂肪库。
  • 感谢 Güngör,但没有更简单的方法无需在命令工具 makefile 中创建和编译?
  • 我在不同库的 iOS6 上遇到了同样的问题。它知道这很难做到。不幸的是,这是我知道的唯一方法

标签: ios xcode ios-simulator dylib xctest


【解决方案1】:

当我在 XCode 项目中遇到此错误时,我打开文件 ???.xcodeproj(在 SubLime 文本编辑器中) 并删除以下行。警告将不再存在!

LIBRARY_SEARCH_PATHS = (
    "\"${PROJECT_DIR}/../../../../../usr/lib\"/**",
    "\"${PROJECT_DIR}/../../../../../usr/lib\"/**",
);

【讨论】:

    【解决方案2】:

    检查Build Settings 以获得您的测试目标。这个值应该看起来相似:

    如果您有任何转义符号,请考虑修复它。我在这里:\"。我刚刚删除了它们

    另请注意:顺序很重要!

    附注来自 GraehamFBuild -> Clean 并重新启动 Xcode 总是一件好事,所以更改才会生效

    【讨论】:

    • 好的,现在我的错误变成了这个-> ld: warning: ignoring file p\342D\323\375, missing required architecture i386 in file p\342D\323\375 (3 slices)
    • 好的,我之前的错误又回来了。我应该向我的主要目标添加任何框架搜索路径!?和我的测试目标一样吗?
    • 您的主要目标中不需要任何框架搜索路径,除非您明确使用需要的框架。
    • 缺少架构 - 意味着您没有使用所需架构构建依赖项,或者您使用的静态库中没有它
    • 尝试为依赖目标将Build active architecture only 设置为 NO,它将强制为您支持的每个架构构建
    猜你喜欢
    • 2013-09-11
    • 1970-01-01
    • 2021-01-27
    • 2022-06-23
    • 2021-01-07
    • 1970-01-01
    • 2016-05-25
    • 2022-11-09
    • 2011-11-02
    相关资源
    最近更新 更多