简体   繁体   中英

JUCE and React Native - linker error “ld: library not found for -lReact”

I'm getting this linker error using CocoaPods with React Native: ld: library not found for -lReact

I have followed the guide at https://facebook.github.io/react-native/docs/embedded-app-ios.html#content

I am trying to integrate with an existing iOS project, which is a JUCE C++ project. JUCE generates the Xcode project file so I believe I need to use the Cocoapods method.

The steps I'm doing are:

  • create or save iOS build from Introjucer project
  • run npm install react-native from root of project (alongside the .jucer file)
  • create Podfile in Builds/iOS as per the guide (but with ../../node_modules as the path)
  • run pod install
  • open workspace in Xcode
  • adjust GCC_PREPROCESSOR_DEFINITIONS to include $(inherited)
  • build

An example project displaying this issue is at https://github.com/adamski/juce-native-navigation/tree/react-native-cocoapods

I think there is something going on with the Introjucer generated project, as I tried the whole process on a fresh new Xcode project and it builds fine.

I have also tried adding libReact.a to the 'Link Binary With Libraries' section but that does not seem to have helped.

I looked for differences between the Introjucer generated project and the Xcode generated one.

One significant difference was the CONFIGURATION_BUILD_DIR or "Per-configuration Build Products Path"

I copied over the setting from the Xcode generated project $(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)

This allowed the linking to complete and gave a successful build :)

Go to your Project -> Your Target -> -> Link Binary With Libraries and you might see some red entries there referring to the React library files here. - >使用库链接二进制文件,您可能会在此处看到一些红色条目引用React库文件。 Just remove those red entries and you should be good to go.

If there are no red entries, then just check that the list of libs in Link Binary With Libraries list has no items which you removed from React project using 'npm uninstall lib_name' command.

Some steps may not be necessary and bring concerns of other, larger issues being hidden. Specifically:

adjust GCC_PREPROCESSOR_DEFINITIONS to include $(inherited)

Namely, pod install scripts are supposed to do the $(inherited) magic for you.

Could a configuration reset be of help?

Go to your Project -> Your Target -> Build Settings -> Link Binary With Libraries and you might see some red entries there referring to the React library files here. Just remove those red entries and you should be good to go.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM