gpt4 book ai didi

swift - 在 CentOS 上构建 Swift

转载 作者:可可西里 更新时间:2023-11-01 01:37:47 24 4
gpt4 key购买 nike

我在 CentOS 6 上从源代码构建 Swift 编译器,遇到库问题。在与构建脚本战斗了一段时间后,我得到了运行 ./utils/build-script 最终给出的地方:

+ /home/src/cmake-3.4.1-Linux-x86_64/bin/cmake --build /home/src/swift/build/Ninja-DebugAssert/cmark-linux-x86_64 -- all
ninja: no work to do.
llvm: using standard linker
+ cd /home/src/swift/build/Ninja-DebugAssert/llvm-linux-x86_64
+ /home/src/cmake-3.4.1-Linux-x86_64/bin/cmake -G Ninja -DCMAKE_C_COMPILER:PATH=clang -DCMAKE_CXX_COMPILER:PATH=clang++ '-DCMAKE_C_FLAGS= ' '-DCMAKE_CXX_FLAGS= ' -DCMAKE_BUILD_TYPE:STRING=Debug -DLLVM_ENABLE_ASSERTIONS:BOOL=TRUE -DLLVM_TOOL_SWIFT_BUILD:BOOL=NO '-DLLVM_TARGETS_TO_BUILD=X86;ARM;AArch64' -DLLVM_INCLUDE_TESTS:BOOL=TRUE -LLVM_INCLUDE_DOCS:BOOL=TRUE -DCMAKE_INSTALL_PREFIX:PATH=/usr -DINTERNAL_INSTALL_PREFIX=local /home/src/swift/llvm
CMake Error at cmake/modules/CheckAtomic.cmake:36 (message):
Host compiler appears to require libatomic, but cannot find it.
Call Stack (most recent call first):
cmake/config-ix.cmake:296 (include)
CMakeLists.txt:403 (include)


-- Configuring incomplete, errors occurred!
See also "/home/src/swift/build/Ninja-DebugAssert/llvm-linux-x86_64/CMakeFiles/CMakeOutput.log".
See also "/home/src/swift/build/Ninja-DebugAssert/llvm-linux-x86_64/CMakeFiles/CMakeError.log".
./utils/build-script: command terminated with a non-zero exit status 1, aborting

(gcc-4.8.2 是我用来编译 llvm 的)

libatomic 在那里:

$ locate libatomic
/opt/gcc-4.8.2/lib64/libatomic.a
/opt/gcc-4.8.2/lib64/libatomic.la
/opt/gcc-4.8.2/lib64/libatomic.so
/opt/gcc-4.8.2/lib64/libatomic.so.1
/opt/gcc-4.8.2/lib64/libatomic.so.1.0.0

我只是不知道如何告诉构建系统去哪里找。我尝试了通常的 CMAKE_LIBRARY_PATH(在命令行上导出 - 我不确定 cmake 是否像 LD_LIBRARY_PATHLIBRARY_PATH 那样工作工作) 但它似乎无法找到它。

我在机器上也没有 root。

最佳答案

在看到这个问题之前,我没有尝试在 CentOS 6 上从源代码构建,但我已经能够在 CentOS 7.1 和 Ubuntu 14.04 上构建 Swift 2.2,并取得了部分成功。需要考虑的几点:

  • 构建 Swift 需要大量依赖项,除非它们恰好已经在系统上,您将需要 root 访问权限安装它们。
  • 在构建脚本中使用 -R 标志来创建发布版本。在 DebugAssert(默认)中构建将需要大量内存。就我而言,即使 14 GB 也不够。发布版本
    大约 6 GB 就可以完成。

至于你的具体问题,它与Clang对头文件和库的GCC相关包的依赖有关。例如,参见 Fedora 21 with clang, without gcc

即使您安装了 GCC 4.8.2 并从 4.8.2 调整了使用 gcc 和 g++ 的路径,Clang 可能仍会在旧的 GCC 目录中查找头文件和库。 CMake 首先尝试编译一个包含 header atomic 的 C++ 测试文件,旧 GCC 中不存在该 header 。因此,它然后尝试链接使用库 libatomic 的 C 测试程序,旧 GCC 中也不存在该库。你可以通过查看 usr1234567 提到的 llvm/cmake/modules/CheckAtomic.cmake 来了解这一点。 CMakeError.log 和 CMakeOutput.log 也可以提供有值(value)的见解。顺便说一句,当我在 CentOS 7.1 上构建 Swift 时,我没有遇到这个问题,因为 Clang 将 GCC 4.8.2 用于 header 和库,并且找到了 atomic header ,因此编译了 C++ 文件。然而,如果 libatomic 检查已经完成,它就会失败,因为存储库提供的 4.8.2 中的 libatomic.so 有 INPUT ( <name of some non-existent file> ) ,所以尝试与 libatomic 链接会出错。

我确定有多种方法可以解决这个问题,但对我来说解决问题的方法是设置以下环境变量,请根据您的具体设置进行调整:

export CPLUS_INCLUDE_PATH=/opt/gcc-4.8.2/include/c++/4.8.2:/opt/gcc-4.8.2/include/c++/4.8.2/x86_64-unknown-linux-gnu

export LIBRARY_PATH=/opt/gcc-4.8.2/lib64:/opt/gcc-4.8.2/lib/gcc/x86_64-unknown-linux-gnu/4.8.2

还要确保您的 4.8.2 版本的 libstdc++.so 在运行时可用于动态链接器。因为你没有根,做

export LD_LIBRARY_PATH=/opt/gcc-4.8.2/lib64

如果你有 root,你可以使用 ldconfig

在开始构建 Swift 之前,您可能想尝试使用 Clang 构建一个简单的 C 程序,将它与 libatomic 链接(该代码实际上不必使用库中的任何符号)和一个简单的 C++ 程序,其中包括<atomic> header 。编译 C++ 程序时,使用 -std=c++11 编译器标志。如果C++程序编译成功,那么libatomic链接测试就不需要成功了。

有趣的是,CMakeOutput.log 文件仍未报告发现 GCC 4.8.2 作为候选 GCC 安装,但配置/构建在错误发生后运行良好。

希望这对您有所帮助。如果您遇到其他问题,请告诉我们。

关于swift - 在 CentOS 上构建 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34234250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com