【问题标题】:JUCE and React Native - linker error "ld: library not found for -lReact"JUCE 和 React Native - 链接器错误“ld: library not found for -lReact”
【发布时间】:2016-01-14 14:55:45
【问题描述】:

我在使用带有 React Native 的 CocoaPods 时遇到此链接器错误: ld: library not found for -lReact

我已按照https://facebook.github.io/react-native/docs/embedded-app-ios.html#content 的指南进行操作

我正在尝试与现有的 iOS 项目集成,这是一个 JUCE C++ 项目。 JUCE 生成 Xcode 项目文件,所以我相信我需要使用 Cocoapods 方法。

我正在做的步骤是:

  • Introjucer 项目创建或保存 iOS 版本
  • 从项目根目录运行npm install react-native(与.jucer 文件一起)
  • 按照指南在Builds/iOS 中创建Podfile(但以../../node_modules 作为路径)
  • 运行pod install
  • 在 Xcode 中打开工作区
  • 调整GCC_PREPROCESSOR_DEFINITIONS 以包含$(inherited)
  • 构建

显示此问题的示例项目位于 https://github.com/adamski/juce-native-navigation/tree/react-native-cocoapods

我认为 Introjucer 生成的项目发生了一些问题,因为我在一个全新的 Xcode 项目上尝试了整个过程,并且构建良好。

我还尝试将 libReact.a 添加到“使用库链接二进制文件”部分,但这似乎没有帮助。

【问题讨论】:

  • 你有没有运行过pod init,创建了一个podfile,运行过pod install等等?
  • 是的,我按照上面链接的指南做了所有这些事情
  • @SwiftArchitect 我已经详细说明了所采取的步骤以及上面链接的示例项目。

标签: ios cocoapods react-native juce


【解决方案1】:

我查找了 Introjucer 生成的项目和 Xcode 生成的项目之间的差异。

一个显着的区别是CONFIGURATION_BUILD_DIR 或“按配置构建产品路径”

我从 Xcode 生成的项目中复制了设置 $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

这允许链接完成并成功构建:)

【讨论】:

  • 我也有同样的问题,但这个包没有……我很好奇你能不能描述一下你把$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)复制到哪里了?
  • @ewizard 在二进制位置
  • 你的意思是在build settings -> per configuration Build Products Path,如果是这样我已经说过:(
  • 实际上我认为它可能正在寻找一个 react pod 而不是在我的 node_modules/react-native 文件夹中,因为我搜索 CONFIGURATION_BUILD_DIR 并且我在 React.xcconfig 文件中看到了很多 ${PODS_CONFIGURATION_BUILD_DIR}/React - 我应该将其更改为指向 node_modules 文件夹吗?
【解决方案2】:

转到您的项目 -> 您的目标 -> 构建阶段 -> 将二进制文件与库链接,您可能会在此处看到一些涉及 React 库文件的红色条目。只需删除那些红色条目,您就可以开始了。

如果没有红色条目,那么只需检查 Link Binary With Libraries 列表中的库列表是否没有您使用“npm uninstall lib_name”命令从 React 项目中删除的项目。

【讨论】:

    【解决方案3】:

    某些步骤可能不是必需的,并且会引起对隐藏的其他更大问题的担忧。具体来说:

    adjust GCC_PREPROCESSOR_DEFINITIONS to include $(inherited)
    

    也就是说,pod install 脚本应该为您执行 $(inherited) 魔法。

    configuration reset 有帮助吗?

    【讨论】:

    • 谢谢,我按照建议,从生成的工作区中删除配置(原始项目没有设置)。我仍然收到链接器错误。
    • 另外添加该步骤确实消除了有关GCC_PREPROCESSOR_DEFINITIONS的警告
    【解决方案4】:

    转到您的项目 -> 您的目标 -> 构建设置 -> 将二进制文件与库链接,您可能会在此处看到一些涉及 React 库文件的红色条目。只需删除那些红色条目,您就可以开始了。

    【讨论】:

    • 从我的 react-native 项目中删除了一些第三方库并在 Xcode 中进行了干净的重建后,我收到了这个错误。删除这些条目以及相关的库解决了这个问题。