Xcode"找不到选项-L的目录"错误

sol*_*eil 10 xcode compiler-errors linker-errors

我收到这些错误:

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)
Run Code Online (Sandbox Code Playgroud)

事实上,这些目录确实存在于上面的路径中.

问题是,该应用程序用于编译罚款.我所做的就是在项目中添加一个新版本的Medialets库,现在我得到了这些错误.

小智 19

有两个人似乎与之混淆的错误

如果它是"找不到选项的目录'-L/..."错误这意味着它是一个库错误,你应该尝试:

单击您的项目(目标)单击库搜索路径下的构建设置,删除路径如果它是"找不到选项的目录'-F/..."这意味着它是一个框架错误,您应该尝试:

单击项目(目标)单击"框架搜索路径下的构建设置",删除路径


Tak*_*aka 8

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

当向项目添加新的库目录时,Xcode 5自动添加"库搜索路径"的路径时,似乎会发生链接器错误.

手动编辑路径后,链接器错误消失了.(我基本上没有改变路径,只是尝试了一些不同的格式,如$(PROJECT_DIR)/ path/to/library或"$(SRCROOT)/ path/to/library".它甚至在更改回原来之后仍然工作格式.)

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


kal*_*iya 5

对于“-L”问题,

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

link_directories ("${PROJECT_SOURCE_DIR}/SDKs/thelib/lib")
Run Code Online (Sandbox Code Playgroud)

请参阅 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());
}
Run Code Online (Sandbox Code Playgroud)

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

/Users/myuser/thelib/lib/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
/Users/myuser/thelib/lib
Run Code Online (Sandbox Code Playgroud)

所以这使得摆脱这个警告有点困难;根据您的文件结构,其中一个可能会出错 - 即使您手动删除它,它们也会在您下次重新生成项目时返回。

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

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

  • 就文档而言,检查责任导致此提交:https://github.com/Kitware/CMake/commit/0c030ef72c30d9c8634d0d815b15d9f238b7b267 和 commitmessage“添加使用 EFFECTIVE_PLATFORM_NAME 到生成的 Xcode iOS 项目,支持切换回构建在开发时在模拟器和设备构建之间来回切换。”。作为一个快速的解决方案,您可以简单地更改 cmake 源代码并自己构建 cmake,而不是使用预构建的可执行文件……或者,在此处发布错误报告 https://gitlab.kitware.com/cmake/cmake/issues (2认同)