繁体   English   中英

在 Mac OS Catalina 中编译 hadoop 本机库。 错误:未知类型名称“constexpr”。 别名声明是 C++11 扩展

[英]Compile hadoop native libraries in Mac OS Catalina. error: unknown type name 'constexpr'. alias declarations are a C++11 extension

我正在尝试在 Unix 中编译 Hadoop 本机库,这就是我正在使用的:

  1. Hadoop:branch-3.2(这里是 Hadoop 存储库
  2. macOS:Catalina 版本 10.15.5
  3. 协议:libprotoc 2.5.0
  4. OpenSSL 1.0.2t 2019 年 9 月 10 日
  5. gcc: Apple clang version 11.0.3 (clang-1103.0.32.62) Target: x86_64-apple-darwin19.5.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  6. java 版本“1.8.0_251”(构建 1.8.0_251-b08)

I followed all steps here: Compiling Hadoop on MAC After fixing a couple of problems with openssl and protobuf now it looks like the compilation of Apache Hadoop MapReduce NativeTask is failing due to a dependency with C++11 .

我是否需要以某种方式为 maven 指定设置为 -std=c++11 的 CXXFLAGS 参数? 我该怎么做? 还是我的 gcc 中缺少一些配置?

我尝试将别名设置为 gcc ,然后立即使用此处解释的标志调用它: 如何使 clang 支持 C++ 11 默认情况下,但仍然不起作用。

到目前为止,这些是我遇到的许多类似错误之一:

[WARNING] /usr/local/include/snappy-stubs-public.h:61:16: warning: alias declarations are a C++11 extension [-Wc++11-extensions]

[WARNING] using uint64 = std::uint64_t;

[WARNING] In file included from /Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/test/TestCompressions.cc:29:

[WARNING] /usr/local/include/snappy.h:197:10: error: unknown type name 'constexpr'

[WARNING]   static constexpr int kBlockLog = 16;

[INFO] Apache Hadoop MapReduce NativeTask ................. FAILURE [  1.995 s]

在仔细阅读 output 之后,我认为这是最终引发错误的命令:

[WARNING] /Library/Developer/CommandLineTools/usr/bin/make  -f CMakeFiles/nttest.dir/build.make CMakeFiles/nttest.dir/build
[WARNING] [ 75%] Building CXX object CMakeFiles/nttest.dir/main/native/test/TestCompressions.cc.o
[WARNING] /Library/Developer/CommandLineTools/usr/bin/c++   -I/Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/target/native/javah -I/Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/src -I/Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/src/util -I/Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/src/lib -I/Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/test -I/Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src -I/Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/target/native -I/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/include/darwin -I/usr/local/include -isystem /Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/../../../../hadoop-common-project/hadoop-common/src/main/native/gtest/include  -g -O2 -Wall -pthread -D_FILE_OFFSET_BITS=64 -DNDEBUG -DSIMPLE_MEMCPY -fno-strict-aliasing -fsigned-char -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk   -o CMakeFiles/nttest.dir/main/native/test/TestCompressions.cc.o -c /Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/test/TestCompressions.cc
[WARNING] In file included from /Users/josh/Dev/hadoop/repo/hadoop/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-nativetask/src/main/native/test/TestCompressions.cc:29:
[WARNING] In file included from /usr/local/include/snappy.h:45:
[WARNING] /usr/local/include/snappy-stubs-public.h:54:14: warning: alias declarations are a C++11 extension [-Wc++11-extensions]
[WARNING] using int8 = std::int8_t;

谢谢你!

我也很难使用clang在 OSX 上构建 hadoop-native 库。 我更成功地切换到使用gcc 10。

首先使用自制软件安装:

brew install gcc

这应该将gcc二进制文件放在路径中,但它们将是gcc-10g++-10等。所以设置一些环境魔法应该导致 CMake 使用这些而不是内置的 Z2C5517DB7BC397F9BZACE14 二进制文件:

export CC=$(which gcc-10)
export CXX=$(which g++-10)
export CPP=$(which cpp-10)
export LD=$(which gcc-10)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM