2017-06-30 4 views
4

Je rencontre des problèmes avec React Native lorsque j'essaie d'ajouter le Google VR SDK ('GVRSDK') en tant que dépendance Podfile, et il est assez facile à répliquer.Réagir natif Incompatible avec Google VR SDK

Étapes:

  1. Créer un nouveau projet vide React autochtone. Exécutez-le avec react-native run-ios pour vous assurer que cela a fonctionné.
  2. cd ios
  3. pod init
  4. Ajouter pod 'GVRSDK' à PODFILE, exécuter pod update
  5. cd ..
  6. react-native run-ios

Le projet est écrasé avec l'erreur suivante:

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) 
+0

La rétrogradation à React Native 0.44.1 (à partir de 0.45.1) semble résoudre ce problème. –

+0

Pareil pour moi. La rétrogradation (de 0.45.1 à 0.44.3) l'a corrigé. – YossiF

Répondre

2

Vous pouvez le résoudre en supprimant le symbole dupliqué dans libGVRSDK.a. Les commandes lipo et ar sont utilisées pour désassembler le fichier de bibliothèque dans les différentes architectures et les réarchiver dans un autre fichier.

J'ai fait le script shell comme suit:

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 ../../../ 

Il peut être plus utile si ce script est appelé lorsque chaque pod installation est exécuté.

PODFILE

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

je crois que ça aide.