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 验证错误`未知类型“查看器”。`