React native glog iOS:未知类型名称'_START_GOOGLE_NAMESPACE _'

时间:2019-08-07 13:19:09

标签: xcode react-native cocoapods fbsdk glog

我已经建立了一个React native的android项目,它工作正常。然后,我从iOS部分开始。我正在使用react-native-cli:2.0.1 react-native:0.60.4和Xcode 10和Mac OS Mojave

默认pod文件在安装glog时遇到一些问题,在执行/bin/bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory时出现错误pod install。即使在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文件中添加了Need to implement mutex.h for your architecture, or #define NO_THREADS,从而解决了glog define no_thread的另一个问题

现在坚持下去

/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反应本机和堆栈溢出,但未发现任何内容。我尝试过旧版构建,清除派生数据。我还尝试了Pod解集成和Pod安装。对于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,因为上述解决方案都无法解决

4 个答案:

答案 0 :(得分:0)

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

您可以通过以下方式进行检查:

$ file ./configure

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

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

答案 1 :(得分:0)

对于这个问题,我还没有确定长期的解决方案,但是我已经比该主题走得更远了。

现在,每次调用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行尾,因此我真的不知道该错误如何正在发生。

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

答案 2 :(得分:0)

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

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

这是来自新用户的。有用。 enter image description here

在这里您可以看到“添加规范回购中继” ...

现在(从我的原始用户那里)看到我的无效命令日志。 enter image description here

trunk无关。然后它开始检查缓存,并下载软件包(例如glogFolly)。不知道为什么。从新用户安装依赖项很容易。

希望此提示可能会导致不同的解决方案。这可能与用户设置/配置有关。就像UTF-8一样。

答案 3 :(得分:0)

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

pod缓存清理–全部, Pod Repo更新(如果使用Pod Repo)和 吊舱安装