【问题标题】:React native glog iOS : Unknown type name '_START_GOOGLE_NAMESPACE_'反应原生 glog iOS:未知类型名称'_START_GOOGLE_NAMESPACE_'
【发布时间】:2019-12-15 03:41:09
【问题描述】:

我已经构建了一个运行良好的 react native 的 android 项目。然后我从 iOS 部分开始。我正在使用 react-native-cli: 2.0.1 react-native: 0.60.4 和 Xcode 10 和 Mac OS Mojave

默认的 pod 文件在安装 glog 时出现了一些问题,当执行 pod install 时,它给出了错误 /bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory。即使在 GitHub 上回答了所有问题并且堆栈溢出(例如安装 Cocoapods、重新安装、安装 ruby​​、链接 cocoapods)之后。后来在 GitHub 上,我发现 pod 文件有一些问题,因此将其替换为 GitHub 上为 react-native 指定的正确内容。然后根据这个链接仍然没有工作:https://forums.expo.io/t/pod-install-errors-on-newly-detached-app-on-macos-installing-glog-bin-bash-configure-bin-sh-m-bad-interpreter-no-such-file-or-directory/10054 然后我修改了 glog 文件,然后它成功安装了 glog。

在那之后,我通过在 ios/Pods/glog/src/config.h 文件中添加 define no_thread 更正了 glog Need to implement mutex.h for your architecture, or #define NO_THREADS 的另一个问题

现在坚持这个

/Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:148:1: Unknown type name '_START_GOOGLE_NAMESPACE_' /Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:168:1: Unknown type name 'int64'; did you mean 'google::int64'? /Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:170:20: Unknown type name 'int64'; did you mean 'google::int64'? /Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:175:1: Unknown type name 'int32'; did you mean 'google::int32'? /Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:236:1: Unknown type name '_END_GOOGLE_NAMESPACE_' /Volumes/Projects/derive-mobile/ios/Pods/glog/src/utilities.h:150:1: Expected unqualified-id

我认为我的 glog 安装并不顺利。我已经在使用项目工作区了。

我已经检查了整个 GitHub Facebook react-native 和堆栈溢出,但没有发现任何东西。我尝试过遗留构建,清除派生数据。我也尝试过 pod deintegrate 和 pod install。对于 glog,我也尝试过 cd ./node_modules/react-native/third-party/glog-0.3.4 && ../../scripts/ios-configure-glog.sh

我该如何解决这个问题?有没有办法完全删除 glog 并在没有 /bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory 的情况下重新安装它,因为没有一个解决方案可以像上面提到的那样工作

【问题讨论】:

  • 你找到答案了吗?
  • 你在环境地狱的中间。不幸的是,我之前已经修复了这个错误,但是因为它需要我沿着 1000 条道路行驶才能找到正确的修复,所以我不记得我做了什么来修复它。我只能说,除了祝你好运,继续努力——甚至重做你已经做过的事情。我认为修复可能涉及您找到的所有来源的部分 - 虽然我从来不需要修改 glog 来安装它,但我确实必须多次尝试安装才能让它工作。
  • 我发现有时会有所帮助的一件事是不要使用 Cocoapods,而是从已安装的 node_modules 文件夹中手动安装依赖项。如果你能在 cocoapods 中去除足够多的 deps,你也许可以从你的 cocoapods 中去除反应——我发现把它放在里面几乎会搞砸一切。如果您需要帮助,请按照此操作。 facebook.github.io/react-native/docs/linking-libraries-ios

标签: xcode react-native cocoapods fbsdk glog


【解决方案1】:

./configure 文件可能已在 DOS 或 Windows 环境中编辑。 (例如,notepad)。该版本可能在每行的末尾添加了一个回车符(^M 或 \r)...在 unix 环境中不兼容。

您可以通过以下方式查看:

$ file ./configure

要将其重新转换为 unix 格式,您可以使用 dos2unix 或使用 vi -b 编辑(二进制模式下的 vi)。

编辑: 在./configure : /bin/sh^M : bad interpreter 中,您还有其他重新转换选项。

【讨论】:

  • 感谢您的回复。我已经尝试过了,在问题中提供的链接中但没有用。
【解决方案2】:

我还没有确定这个问题的长期解决方案,但我已经比这个线程更进一步了。

现在,每次调用 yarn 命令后,我都需要更新 ios-configure-glog.sh 以替换这些行:

./configure --host arm-apple-darwin

# Fix build for tvOS
cat << EOF >> src/config.h

/* Add in so we have Apple Target Conditionals */
#ifdef __APPLE__
#include <TargetConditionals.h>
#include <Availability.h>
#endif

/* Special configuration for AppleTVOS */
#if TARGET_OS_TV
#undef HAVE_SYSCALL_H
#undef HAVE_SYS_SYSCALL_H
#undef OS_MACOSX
#endif

/* Special configuration for ucontext */
#undef HAVE_UCONTEXT_H
#undef PC_FROM_UCONTEXT
#if defined(__x86_64__)
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__rip
#elif defined(__i386__)
#define PC_FROM_UCONTEXT uc_mcontext->__ss.__eip
#endif
EOF

这些行

dos2unix -f configure
dos2unix -f config.sub
dos2unix -f config.guess
./configure --host arm-apple-darwin
cp {THE FULL PATH TO MY PROJECT}/node_modules/react-native/ReactAndroid/src/main/jni/third-party/glog/config.h src

这通过一个修复程序解决了我所有的 glog 问题,但这不是永久性的,我真的不想分叉 react-native 使其成为永久性的。

也许这会为其他人指明正确的方向,以提出长期解决方案。我已将错误的文件格式缩小到这 3 个文件(configure、config.sub、config.guess),它们似乎都驻留在我的 Xcode 应用程序中,但似乎使用 LF 行结尾,所以我真的不知道错误是如何发生的正在发生。

我也可能从该文件中删除了太多内容,但我没有发现任何与此相关的问题。

【讨论】:

    【解决方案3】:

    我试过dos2unix,但老实说,我不知道应该将它应用到哪个文件。因为如果您执行pod install --verbose,您会看到glog 正在被下载到一个随机的临时文件夹并被构建(这就是它失败的地方)。所以我没有控制权。

    所以,我尝试了其他方法。在我的 Mac 中创建了一个新用户Xcode 是一个共享应用程序。 pod install 刚刚工作。没有抱怨。现在,看,控制台输出的差异似乎指向trunk

    这个来自新用户。有用。

    在那里你可以看到“添加规范 repo 主干”...

    现在查看我的非工作命令日志(来自我的原始用户)。

    trunk 什么都没有。它开始检查缓存并下载包(如glogFolly)。不知道为什么。从新用户那里安装依赖项轻而易举。

    希望这个提示可能会导致不同的解决方案。它可能与用户设置/配置有关。比如 UTF-8 什么的。

    【讨论】:

      【解决方案4】:

      为我解决的问题是从 xcode (xcode->preferences->locations) 中删除派生数据文件夹,从 ios 文件夹中删除 pod 文件夹,然后运行命令

      pod 缓存清理 –all, pod repo 更新(如果您使用 pod repo)和 吊舱安装

      【讨论】:

        猜你喜欢
        • 2012-10-28
        • 1970-01-01
        • 1970-01-01
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-19
        相关资源
        最近更新 更多