Xcode出现“选项-L的目录未找到”错误

11

我遇到了这些错误:

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库的新版本添加到项目中,现在出现了这些错误。


这个问题可能会有所帮助:https://dev59.com/WGvXa4cB1Zd3GeqPLrT9 - ICL1901
7个回答

22

有两个错误让人们感到困惑:

如果出现“选项‘-L/…’找不到目录”的错误,那意味着出现了库错误,您应该尝试:

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

如果出现“选项‘-F/…’找不到目录”的错误,那意味着出现了框架错误,您应该尝试:

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

8
当我向项目添加一个新库时,我遇到了同样的问题。
似乎当Xcode 5将新的库目录添加到项目中时,链接器错误就会发生,因为它自动向“库搜索路径”添加了一条路径。
手动编辑路径后,链接器错误消失了。(我本质上并没有改变路径,只是尝试了一些不同的格式,如$(PROJECT_DIR)/path/to/library或"$(SRCROOT)/path/to/library"。 即使改回原始格式也可以正常工作。)
我认为这是Xcode的一个bug。 我使用的是Xcode 5.1(5B130a)。

看起来对我来说也是个bug,希望很快能得到解决。它是可以修复的,但很烦人。我只是删除了它不喜欢的路径。如果它自己能处理这个问题就好了。 - John Contarino

5

针对"-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时包含额外的路径,因为这会导致像你展示的不必要的链接器警告。 - Paul Solt
2
就文档而言,检查责任归咎于此提交:https://github.com/Kitware/CMake/commit/0c030ef72c30d9c8634d0d815b15d9f238b7b267,其中提交信息为“Add use of EFFECTIVE_PLATFORM_NAME to generated Xcode projects. Facilitates building iOS projects, enabling switching back and forth between simulator and device builds at development time.”。作为快速解决方案,您可以简单地更改cmake源代码并自行构建cmake,而不是使用预构建的可执行文件...或者,您可以在此处发布错误报告https://gitlab.kitware.com/cmake/cmake/issues。 - kalmiya

4

警告:'-L"----it's a Library Error' 选项的目录未找到。

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


1

仅仅从“Build Phases”中的“Link With Binary With Libraries”部分删除库似乎不能解决Xcode 6中的问题。

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

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

3)选择“删除引用”

4)转到存储库或项目文件夹,将其拖到“Frameworks”文件夹中

5)清理并重新构建,错误应该消失了


1

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


0

我在构建React Native应用程序时遇到了-L和-F错误,而现有的答案都没有解决问题。

对我来说,问题是我已经在Podfile中更新了iOS版本:

platform :ios, '11.0'

但不在Xcode项目的pbxproj文件中:

IPHONEOS_DEPLOYMENT_TARGET = 10.0;

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

使版本匹配解决了问题。


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