React Native 与 Google VR SDK 不兼容

Posted

技术标签:

【中文标题】React Native 与 Google VR SDK 不兼容【英文标题】:React Native Incompatible With Google VR SDK 【发布时间】:2017-06-30 04:52:24 【问题描述】:

当我尝试将 Google VR SDK ('GVRSDK') 添加为 Podfile 依赖项时,我遇到了 React Native 问题,而且它很容易复制。

步骤:

    创建一个新的空白 React Native 项目。使用 react-native run-ios 运行它以确保它正常工作。 cd ios pod initpod 'GVRSDK'添加到Podfile,执行pod update cd .. react-native run-ios

项目因以下错误而崩溃:

duplicate symbol __ZN3fLI9FLAGS_novE in:
/foo/ios/Pods/GVRSDK/Libraries/libGVRSDK.a(vlog_is_on.o)
/foo/ios/build/Build/Products/Debug-iphonesimulator/libReact.a(vlog_is_on.o)
duplicate symbol __ZN3fLI7FLAGS_vE in:
/foo/ios/Pods/GVRSDK/Libraries/libGVRSDK.a(vlog_is_on.o)
/foo/ios/build/Build/Products/Debug-iphonesimulator/libReact.a(vlog_is_on.o)
duplicate symbol __ZN6google13RemoveLogSinkEPNS_7LogSinkE in:
/foo/ios/build/Build/Products/Debug-iphonesimulator/libReact.a(logging.o)
/foo/ios/Pods/GVRSDK/Libraries/libGVRSDK.a(logging.o)
duplicate symbol __ZN6google10AddLogSinkEPNS_7LogSinkE in:
/foo/ios/build/Build/Products/Debug-iphonesimulator/libReact.a(logging.o)
    /foo/ios/Pods/GVRSDK/Libraries/libGVRSDK.a(logging.o)
ld: 4 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)



** BUILD FAILED **


The following build commands failed:

Ld build/Build/Products/Debug-iphonesimulator/foo.app/foo normal x86_64
(1 failure)

【问题讨论】:

降级到 React Native 0.44.1(从 0.45.1)似乎可以解决这个问题。 对我来说也一样。降级(从 0.45.1 到 0.44.3)修复了它。 【参考方案1】:

您可以通过删除 libGVRSDK.a 中的重复符号来解决它。 lipoar 命令用于反汇编几种架构中的库文件并将它们重新归档到另一个文件中。

我制作的shell脚本如下:

pod_post_install.sh

#!/bin/bash

cd ./Pods/GVRSDK/Libraries/
lipo -info libGVRSDK.a

# Divide to each platform
lipo -thin armv7 libGVRSDK.a -output libGVRSDK_armv7
lipo -thin i386 libGVRSDK.a -output libGVRSDK_i386
lipo -thin x86_64 libGVRSDK.a -output libGVRSDK_x86_64
lipo -thin arm64 libGVRSDK.a -output libGVRSDK_arm64

# Delete duplicate file
chmod 777 libGVRSDK_armv7
chmod 777 libGVRSDK_i386
chmod 777 libGVRSDK_x86_64
chmod 777 libGVRSDK_arm64

ar -dv libGVRSDK_armv7 vlog_is_on.o
ar -dv libGVRSDK_i386 vlog_is_on.o
ar -dv libGVRSDK_x86_64 vlog_is_on.o
ar -dv libGVRSDK_arm64 vlog_is_on.o

# rm libGVRSDK.a
lipo -create libGVRSDK_armv7 libGVRSDK_i386 libGVRSDK_x86_64 libGVRSDK_arm64 -output libGVRSDK.a

# Delete media
rm libGVRSDK_armv7
rm libGVRSDK_i386
rm libGVRSDK_x86_64
rm libGVRSDK_arm64

cd ../../../

如果在每个 pod install 运行时调用此脚本会更有用。

播客文件

post_install do |installer|
    system(". ./pod_post_install.sh")
end

我相信它会有所帮助。

【讨论】:

以上是关于React Native 与 Google VR SDK 不兼容的主要内容,如果未能解决你的问题,请参考以下文章

React Native VR - Viro 替代品

React Native:Google附近的API与Exchange数据

iOS 动态更新方案 JSPatch 与 React Native 的对比

google 登录崩溃 Apk(React Native)

尝试解析模块“@react-native-community/google-signin”时出错

React-Native-Maps:地图为空。仅显示 Google 徽标和标记