【问题标题】:Running CMake on Amazon Linux在 Amazon Linux 上运行 CMake
【发布时间】:2018-05-10 13:17:02
【问题描述】:

我正在尝试在 AWS Amazon Linux EC2 实例上构建 OpenJpeg。我安装了 cmake 和 gcc 并且在安装过程中没有任何问题。当我尝试 cmake openjpeg 时,出现以下错误:

-- Check if the system is big endian
-- Searching 16 bit integer
CMake Error at /usr/share/cmake/Modules/TestBigEndian.cmake:44 (message):
  no suitable type found
Call Stack (most recent call first):
  CMakeLists.txt:164 (TEST_BIG_ENDIAN)


-- Configuring incomplete, errors occurred!

检查错误日志,CMake 似乎无法确定整数、short 和 long 的大小。完整的错误日志可见this gist

我怎样才能解决这个问题并使 CMake 工作?

【问题讨论】:

    标签: cmake amazon-linux


    【解决方案1】:

    亚马逊有一个指南:Preparing to Compile Software,它建议使用以下命令来安装 C 编译器。

    sudo yum groupinstall "Development Tools"
    

    接下来,您可以自己下载和构建 Cmake:Install Cmake 3

    wget https://cmake.org/files/v3.18/cmake-3.18.0.tar.gz
    tar -xvzf cmake-3.18.0.tar.gz
    cd cmake-3.18.0
    ./bootstrap
    make
    sudo make install
    

    注意:最后一个make实际上需要sudo。

    【讨论】:

    【解决方案2】:

    虽然这实际上并不能回答错误发生的原因,但我能够通过从源代码构建 CMake 来构建 OpenJpeg。所以我刚刚删除了通过 yum 安装的 Cmake,我相信它是 2.8.12。下载了最新的 CMake3 源代码 (v 3.10) 构建了 Cmake 和 openjpeg 以及我所有的其他软件包,没有任何问题。

    【讨论】:

      【解决方案3】:

      这适用于最新的 Amazon Linux 映像(2021 年 11 月):

      # Install sudo, wget and openssl, which is required for building CMake
      yum install sudo wget openssl-devel -y
      
      # Install development tools
      sudo yum groupinstall "Development Tools" -y
      
      # Download, build and install cmake
      wget https://cmake.org/files/v3.18/cmake-3.18.0.tar.gz
      tar -xvzf cmake-3.18.0.tar.gz
      cd cmake-3.18.0
      ./bootstrap
      make
      sudo make install
      

      【讨论】:

        【解决方案4】:

        您可以尝试set up a Docker container 复制正确的环境。这样,您可以在本地机器上形成一个容器,确保它全部构建在容器环境上,然后在 EC2 上使用这个环境。

        Github 上有一个项目,它提供了一个 Docker 映像,可用于为 Lambda 编译并在本地进行测试。看看:https://github.com/lambci/docker-lambda

        【讨论】:

        • Thabks 但我需要直接在实例上构建,因为我会将包二进制文件移动到 AWS lambda
        • @ZaidAmir 这不是问题——看看这个:github.com/lambci/docker-lambda
        • 老实说,我不明白容器如何解决这个特殊问题。 EC2 实例应自行复制 lambda 环境。无需为此添加另一层复杂性。
        猜你喜欢
        • 2020-09-06
        • 2017-03-05
        • 2018-05-30
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        • 2018-01-23
        • 2014-09-25
        • 2017-12-09
        相关资源
        最近更新 更多