c++ - 在 Mac OS Catalina 中编译 hadoop 原生库。错误 : unknown type name 'constexpr' . 别名声明是 C++11 扩展

标签 c++ macos c++11 unix hadoop

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

  • Hadoop:分支 3.2(here is the Hadoop Repository)
  • macOS:Catalina 版本 10.15.5
  • Protobuf:libprotoc 2.5.0
  • OpenSSL 1.0.2t 2019 年 9 月 10 日
  • gcc:Apple clang 版本 11.0.3 (clang-1103.0.32.62) 目标:x86_64-apple-darwin19.5.0 线程模型:posix InstalledDir:/Library/Developer/CommandLineTools/usr/bin
  • Java 版本“1.8.0_251”(内部版本 1.8.0_251-b08)

  • 我按照这里的所有步骤操作:Compiling Hadoop on MAC
    在修复了 openssl 和 protobuf 的几个问题之后,现在看起来 Apache Hadoop MapReduce NativeTask 的编译由于与 的依赖关系而失败。 C++11 .
    我是否需要以某种方式指定将 CXXFLAGS 参数设置为 -std=c++11?我该怎么做?还是我的 gcc 中缺少一些配置?
    我尝试为 gcc 设置一个别名,然后立即使用标志调用它,就像这里解释的那样:How to make clang support C++ 11 by default ,但仍然不起作用。
    到目前为止,这些是我遇到的许多类似错误之一:
    [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]
    
    在更仔细地阅读输出后,我认为这是最终引发错误的命令:
    [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;
    
    谢谢你!

    最佳答案

    我也很难在 OSX 上使用 clang 构建 hadoop-native 库。 .我更成功地切换到使用 gcc 10.
    首先使用自制软件安装:

    brew install gcc
    
    这应该把 gcc路径中的二进制文件,但它们将是 gcc-10 , g++-10等等。所以设置一些环境魔法应该让 CMake 使用这些而不是内置的 clang 二进制文件:
    export CC=$(which gcc-10)
    export CXX=$(which g++-10)
    export CPP=$(which cpp-10)
    export LD=$(which gcc-10)
    

    关于c++ - 在 Mac OS Catalina 中编译 hadoop 原生库。错误 : unknown type name 'constexpr' . 别名声明是 C++11 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63008344/

    相关文章:

    c++ - 随机函数不断得到相同的结果

    bash - 使用bash脚本替换文件名中的多个下划线

    ios - 我需要一种方法来检索和记录通过 USB 连接的 iPhone 设备的 IMEI、序列号、ICCID 和 MEID

    c++ - 在 Anjuta 3.4.3 中将 -std=c++11 添加到编译器选项

    c++ - 如何从父模板函数访问子成员?

    c++ - 指向成员函数的指针

    c++ - Qt - QCheckBox 不发出 stateChanged(int state) 信号

    c - 递增变量直到溢出的循环结构?

    c++ - pthread_once() 中的竞争条件?

    javascript - 我如何跟踪 FS 被 emscripten 包含的原因?