【问题标题】:Xcode "directory not found for option -L" errorsXcode“找不到选项-L的目录”错误
【发布时间】:2013-12-27 03:35:20
【问题描述】:

我收到以下错误:

ld: warning: directory not found for option '-L"/pathToMyApp/MyApp/Shared/Libraries/ADMS_AppLibrary"'
ld: warning: directory not found for option '-L"/pathToMyApp/MyApp/Shared/Libraries/TestFlightSDK1.1"'
ld: warning: directory not found for option '-L"/pathToMyApp/MyApp/Shared/Libraries/Medialets"'
ld: library not found for -lTestFlight
clang: error: linker command failed with exit code 1 (use -v to see invocation)

这些目录确实存在于上述路径中。

问题是,用于编译的应用程序很好。我所做的只是将新版本的 Medialets 库添加到项目中,现在我得到了这些错误。

【问题讨论】:

标签: xcode compiler-errors linker-errors


【解决方案1】:

人们似乎对两个错误感到困惑:

如果是“找不到选项'-L/...的目录”错误,则表示这是库错误,您应该尝试:

  • 点击您的项目(目标)
  • 点击构建设置
  • 在库搜索路径下,删除路径

如果它是“找不到选项'-F/...的目录”,这意味着它是一个框架错误,你应该尝试:

  • 点击您的项目(目标)
  • 点击构建设置
  • 在框架搜索路径下,删除路径

【讨论】:

    【解决方案2】:

    当我向项目添加新库时,我遇到了同样的问题。

    似乎是Xcode 5在向项目添加新库目录时自动添加“库搜索路径”的路径时发生链接器错误。

    手动编辑路径后,链接器错误消失了。 (我实际上并没有改变路径,只是尝试了一些不同的格式,例如 $(PROJECT_DIR)/path/to/library 或 "$(SRCROOT)/path/to/library"。即使改回原来的格式也能正常工作格式。)

    我认为这是 Xcode 的错误。我正在使用 Xcode 5.1 (5B130a)。

    【讨论】:

    • 看起来这对我来说也是一个错误,希望它会很快得到解决。它可以修复但很烦人。我只是删除了它不喜欢的路径。如果它自己处理就好了。
    【解决方案3】:

    对于“-L”问题,

    如果您使用 cmake(在我的例子中是 3.3.2)并使用 xcode 生成器,它将为您指定的每个链接目录生成多个条目,

    link_directories ("${PROJECT_SOURCE_DIR}/SDKs/thelib/lib")
    

    查看 cmake 源代码 cmGlobalXCodeGenerator::AddDependAndLinkInformation(...) 它在哪里执行此操作:

    { ...
      if(this->XcodeVersion > 15)
      {
        // Now add the same one but append
        // $(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) to it:
        linkDirs += " ";
        linkDirs += this->XCodeEscapePath((*libDir + "/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)").c_str());
      }
      linkDirs += " ";
      linkDirs += this->XCodeEscapePath(libDir->c_str());
    }
    

    这将导致 XCode 在 Lib 搜索路径中包含这些条目

    /Users/myuser/thelib/lib/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
    /Users/myuser/thelib/lib
    

    因此,消除此警告变得更加困难;根据您的文件结构,其中一个可能会出错 - 即使您手动删除它,它们也会在下次重新生成项目时返回。

    一种解决方法是为其抱怨的目录创建空目录...

    也可以使用“-Wl”向链接器“传递一些参数”,但到目前为止,我还没有找到要传递什么来消除该特定警告。

    【讨论】:

    • 它是否记录在某处?我不明白为什么它不只是使用我在链接到我的库时指定的内容。当我使用 cmake 自动生成 Xcode 时,我不希望在 Xcode 中包含额外的路径,这会导致不必要的链接器警告,如您所示。
    • 就文档而言,检查责任会导致此提交:github.com/Kitware/CMake/commit/… with commitmessage "Add use of EFFECTIVE_PLATFORM_NAME to generated Xcode projects. 促进构建 iOS 项目,允许在模拟器之间来回切换和设备在开发时构建。”。作为一种快速的解决方案,您可以简单地更改 cmake 源代码并自己构建 cmake,而不是使用预构建的可执行文件......或者,在此处发布错误报告 gitlab.kitware.com/cmake/cmake/issues
    【解决方案4】:

    ld:警告:找不到选项“-L”的目录----这是一个库错误

    选择你的项目进入Build Settings标签,在Library Search Paths下,用这个字符串替换路径$( SRCROOT)

    【讨论】:

      【解决方案5】:

      仅从“构建阶段”的“与二进制文件链接”部分中删除库似乎至少不能解决 Xcode 6 中的问题。

      1) 转到您的项目导航器并找到“Frameworks”文件夹

      2)您的库可能已经存在,所以只需右键单击并“删除”

      3) 选择“删除引用”

      4) 转到所有文件所在的 repo 或项目文件夹并拖动 它进入“框架”文件夹

      5) 清理并重建,错误应该会消失

      【讨论】:

        【解决方案6】:

        我没有在库搜索路径下添加任何库路径,但我可以通过删除派生数据来解决此问题,方法是转到首选项 -> 位置

        【讨论】:

          【解决方案7】:

          我开始在 React Native 应用程序的构建中看到 -L 和 -F 错误,并且现有答案都没有解决问题。

          对我来说,问题是我更新了 Podfile 中的 ios 版本:

          platform :ios, '11.0'
          

          但不在 xcode project.pbxproj 文件中:

          IPHONEOS_DEPLOYMENT_TARGET = 10.0;
          

          (该设置在.pbxproj文件中出现多次)

          使版本匹配解决了问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-05-23
            • 1970-01-01
            • 1970-01-01
            • 2013-08-03
            • 1970-01-01
            • 2012-07-08
            • 2012-02-13
            相关资源
            最近更新 更多