无法使用 Firebase ML Kit Vision 文本检测器编译 iOS React Native 应用程序
Posted
技术标签:
【中文标题】无法使用 Firebase ML Kit Vision 文本检测器编译 iOS React Native 应用程序【英文标题】:Unable to compile iOS React Native app with Firebase ML Kit Vision Text Detector 【发布时间】:2018-06-21 20:59:25 【问题描述】:我正在使用 React Native 构建一个应用程序,我已经“弹出”到它自己的 ios 原生应用程序项目中。我有兴趣使用新的 Firebase ML Kit Vision Text Detector 来使用 on-device 模型识别图像中的文本,并且我愿意为它编写自己的 NativeModule 包装器(因为它是如此新的,我在 react-native-firebase 等项目中看不到任何现有的包装器)。
所以,我使用 Cocoapods 来引入 Firebase 依赖项,但是当我尝试编译新工作区时,出现以下链接器错误:
duplicate symbol __ZN3fLB28FLAGS_nosymbolize_stacktraceE in:
/Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(examine_stack_b03c119c7358b452600b1afd20ca186c.o)
/Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(utilities.o)
duplicate symbol __ZN3fLB26FLAGS_symbolize_stacktraceE in:
/Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(examine_stack_b03c119c7358b452600b1afd20ca186c.o)
/Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(utilities.o)
duplicate symbol __ZN3fLI9FLAGS_novE in:
/Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(vlog_is_on_ec23571a5409c45b7e2ca681c18af4cb.o)
/Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(vlog_is_on.o)
duplicate symbol __ZN3fLI7FLAGS_vE in:
/Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(vlog_is_on_ec23571a5409c45b7e2ca681c18af4cb.o)
/Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(vlog_is_on.o)
duplicate symbol __ZN3fLS13FLAGS_vmoduleE in:
/Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(vlog_is_on_ec23571a5409c45b7e2ca681c18af4cb.o)
/Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(vlog_is_on.o)
duplicate symbol __ZN3fLB18FLAGS_nolog_prefixE in:
/Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(logging_2072041cb58f7b92d4eb8dae33e75a0d.o)
/Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(logging.o)
duplicate symbol __ZN3fLB16FLAGS_log_prefixE in:
/Users/francisli/Projects/clients/app/apptag-app/ios/Pods/GoogleMobileVision/TextDetector/Frameworks/TextDetector.framework/TextDetector(logging_2072041cb58f7b92d4eb8dae33e75a0d.o)
/Users/francisli/Library/Developer/Xcode/DerivedData/AppTag-arpnqvohzbwieueghdomemjvqvxt/Build/Products/Debug-iphonesimulator/libReact.a(logging.o)
ld: 7 duplicate symbols for architecture x86_64
从我读到的关于 React Native 项目中重复符号错误的其他案例中,这通常是由于除了将 React 项目手动链接到主应用程序项目之外,还包含依赖于 React 的 pod(因为它最初是在弹出后设置的,以及使用react-native link
链接的其他库)。但是,情况并非如此——我通过 podfile 引入的唯一库与 Firebase 相关,所以我不确定冲突是如何发生的。
任何人的任何见解 - 可能来自致力于 iOS 新机器学习套件的 Firebase 团队?请注意,我什至还没有编写任何引用框架的代码,我只是试图让工作区配置进行编译。这是 podfile 供参考:
# Uncomment the next line to define a global platform for your project
platform :ios, '11.3'
target 'App' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
# Pods for App
pod 'Firebase/Core'
pod 'Firebase/MLVision'
pod 'Firebase/MLVisionTextModel'
target 'AppTests' do
inherit! :search_paths
# Pods for testing
end
end
这是主应用程序项目中所有链接库项目的屏幕截图:
【问题讨论】:
所以,尽管 Podfile 只引用了 Firebase 库,但事实证明 React 和 Firebase 之间存在一个共享组件:glog(Google 开源 C++ 日志记录实用程序),它是符号的来源参考。我已经尝试从 React 项目配置中删除 glog 源文件,希望它可以链接到 TextDetector 框架中的 glog 符号,但是之后我得到了一组全新的 missing 符号我这样做了...谷歌的人能告诉我什么版本的 glog 被静态编译到 TextDetector 框架二进制文件中吗?! 我不熟悉 React Native,但我尝试按照 React Native 的与现有应用程序集成指南( facebook.github.io/react-native/docs/…)。我没有收到任何重复的符号错误。我的 ML Kit pod 版本是 0.9.0。 GoogleMobileVision pod(包括 GoogleMobileVision/TextDetector)是 1.3.2。而glog版本是0.3.4。所以我似乎无法重现这个问题。 我只按照 React Native 的指南安装了所有 CocoaPods,然后构建了现有的 ML Kit Quick Start MLVision 应用程序,而没有完成将 React Native 添加到应用程序的步骤。我确实验证了 ML Kit 和 React Native 的 pod(包括 glog)都显示在 xcode 项目导航器中。然后,我构建并运行了该应用程序,没有出现任何问题。 感谢您的 cmets - 我将尝试使用 ML Kit 示例应用程序遵循您描述的相同过程。但是,如果您实际上没有完成实际集成,那么我认为您不会看到问题,因为错误出现在构建过程的 linking 步骤 - 如果示例应用程序没有引用到 React Native 库,那么链接器就不需要对编译的库做任何事情,也不会显示错误。 【参考方案1】:在将 ML kit 应用于 RN 项目时,我遇到了同样的问题。这是解决方案:
选择主要目标>构建设置>死剥离代码=是
希望它能让你度过难关。
【讨论】:
非常感谢!在附近消息和 React Native 出现类似错误后为我工作以上是关于无法使用 Firebase ML Kit Vision 文本检测器编译 iOS React Native 应用程序的主要内容,如果未能解决你的问题,请参考以下文章