React Native 0.60 升级:未知类型名称“MutexType”

Posted

技术标签:

【中文标题】React Native 0.60 升级:未知类型名称“MutexType”【英文标题】:React Native 0.60 upgrade: Unknown type name 'MutexType' 【发布时间】:2019-07-25 07:29:39 【问题描述】:

我正在将我的应用升级到 React Native v0.60.4。我完成了文档和升级助手中的所有步骤,但是在尝试为 ios 构建应用程序时,glog 的构建失败并出现以下错误:

.../app/ios/Pods/glog/src/base/mutex.h:147:3: error: Need to implement mutex.h for your architecture, or #define NO_THREADS
# error Need to implement mutex.h for your architecture, or #define NO_THREADS
  ^
.../app/ios/Pods/glog/src/base/mutex.h:188:3: error: unknown type name 'MutexType'
  MutexType mutex_;

找不到任何解决问题的方法。

我的播客文件:

platform :ios, '9.0'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'

target '...app' do
  # Uncorm mment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  pod 'React', :path => '../node_modules/react-native/'
  pod 'React-Core', :path => '../node_modules/react-native/React'
  pod 'React-DevSupport', :path => '../node_modules/react-native/React'
  pod 'React-fishhook', :path => '../node_modules/react-native/Libraries/fishhook'
  pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
  pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
  pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
  pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
  pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
  pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
  pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
  pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
  pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
  pod 'React-RCTWebSocket', :path => '../node_modules/react-native/Libraries/WebSocket'

  pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
  pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
  pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
  pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
  pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'

  pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
  pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
  pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'

  # Pods for ...app
  pod 'Firebase/Core', '~> 5.15.0'
  pod 'Firebase/Performance'
  pod 'Firebase/Storage'

  target '...appTests' do
    inherit! :search_paths
    # Pods for testing
  end

  use_native_modules!
end

【问题讨论】:

github.com/google/glog/blob/master/src/base/mutex.h 看到这个并比较文档。 过去 1 周以来一直在为此苦苦挣扎。有人找到解决方案了吗? 有运气的人吗? 【参考方案1】:

我通过在 iOS/Pods/glog/src/config.h 中的文件 config.h 的底部添加 define NO_THREADS 解决了这个问题。但我还有另一个与 glog 相关的问题。我不确定这是否是解决问题的正确方法。

【讨论】:

感谢分享!是的,我也尝试过这种方式,但是 glog 因其他问题而失败。 你们找到任何解决方案了吗?【参考方案2】:

对于未来的 Google 员工,这是因为(据我所知)RN 在pod install 期间生成的配置脚本无法正确检测 macOS 上是否包含 pthreads 支持。这似乎是由于 Xcode 11 和 Xcode 12 之间存在一些差异,因为降级的人说问题消失了。

无论如何,以下对我有用:

在文件中的任意位置打开ios/Pods/Flipper-Glog/src/config.h 并添加#define HAVE_PTHREAD 1,并将HAVE_RWLOCK 标志更改为#define HAVE_RWLOCK 1 打开ios/Pods/glog/src/config.h 并执行相同操作。你需要做这两个库。

进行此更改使事情对我有用。这不仅仅是强迫它工作,它正在纠正以前工作的东西。我在旧项目中验证了这些字段设置正确(并且 pthread 支持在 macOS、模拟器和 iOS 中很普遍)。

【讨论】:

以上是关于React Native 0.60 升级:未知类型名称“MutexType”的主要内容,如果未能解决你的问题,请参考以下文章

将 React Native 升级到 0.60-RC2 后找不到库“libjsc.so”

react native 0.60 无法下载gradle5.4.1-all

navigator.geolocation.getCurrentPosition 在 React Native 版本(0.60)及更高版本中不起作用,如何获取位置?

React Native 0.60 - Release Bundle/Build 缺少 ic_launcher_round

使用 Relay + React Native (create-react-native-app) 时出错:GraphQL 验证错误`未知类型“查看器”。`

RNAppAuth,iOS 构建失败,未知类型名称“命名空间”,react-native-app-auth