首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux阿尔卑斯平台下构建llvm 6

在Linux阿尔卑斯平台下构建llvm 6
EN

Stack Overflow用户
提问于 2018-05-09 16:32:38
回答 2查看 3.4K关注 0票数 2

我正在尝试在Linux Alpine Docker容器上构建Linux Alpine

下面是我在这些指示之后所做的工作

  • apk add build-base
  • apk add python
  • apk add zlib
  • svn co http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_600/final/ llvm
  • svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_600/final/ clang
  • svn co http://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_600/final/ libcxx

(显然,所有svn调用都在适当的文件夹中)

  • 然后我制作我的build文件夹并做cmake -G "Unix Makefiles" ../llvm

但是,当我到make时,经过一小段时间,它就会死掉,如下所示:

代码语言:javascript
复制
    [ 11%] Building CXX object projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/algorithm.cpp.o
In file included from /root/llvm/projects/libcxx/include/ostream:140:0,
                 from /root/llvm/projects/libcxx/include/istream:163,
                 from /root/llvm/projects/libcxx/include/random:1646,
                 from /root/llvm/projects/libcxx/src/algorithm.cpp:11:
/root/llvm/projects/libcxx/include/locale: In function '_Tp std::__1::__num_get_signed_integral(const char*, const char*, std::__1::ios_base::iostate&, int)':
/root/llvm/projects/libcxx/include/locale:739:76: error: there are no arguments to 'strtoll_l' that depend on a template parameter, so a declaration of 'strtoll_l' must be available [-fpermissive]
         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
                                                                            ^
/root/llvm/projects/libcxx/include/locale:739:76: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/root/llvm/projects/libcxx/include/locale: In function '_Tp std::__1::__num_get_unsigned_integral(const char*, const char*, std::__1::ios_base::iostate&, int)':
/root/llvm/projects/libcxx/include/locale:779:86: error: there are no arguments to 'strtoull_l' that depend on a template parameter, so a declaration of 'strtoull_l' must be available [-fpermissive]
         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
                                                                                      ^
At global scope:
cc1plus: warning: unrecognized command line option '-Wno-noexcept-type'
make[2]: *** [projects/libcxx/lib/CMakeFiles/cxx_objects.dir/build.make:63: projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/algorithm.cpp.o] Error 1

我是不是遗漏了什么,比如依赖?或者这是一个已知的需要修复的bug?我该怎么做才能得到一个工作,最近的llvm + clang + libc++的Linux阿尔卑斯?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-11 18:36:02

在编写本报告时,有公开的拉动请求在aports中添加llvm6。因为它牵扯了很多补丁和微调,所以从源头上构建高山似乎并不容易。

因此,我们有充分的理由相信很快会有一个官方llvm6包,但在出现之前,您可以使用该PR中的APKBUILD自己构建llvm。

安装依赖项

https://wiki.alpinelinux.org/wiki/Abuild_and_Helpers是阿尔卑斯用于编译其包的实用工具。

代码语言:javascript
复制
apk add alpine-sdk

diffutils将自动安装您所需的大部分依赖项,但它在PR中的依赖列表中缺少它。

代码语言:javascript
复制
apk add diffutils

不再是 root

因此,如果您还没有创建用户帐户,那么就创建一个用户帐户。我用的是用户名apk

代码语言:javascript
复制
adduser apk
adduser apk abuild
su - apk
abuild-keygen -a

克隆PR并编译

代码语言:javascript
复制
git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports
cd aports/main/llvm6
abuild -r

abuild -r确实需要很长的时间,所以如果你正在跟进的话,现在可能是你午休的好时机。

安装结果包

如果一切都成功了,abuild将把一堆.apk文件放在$HOME/packages/main中。再次假设用户帐户名为apk,其主文件夹为/ home /apk,则作为root用户。

代码语言:javascript
复制
cp /home/apk/.abuild/*.rsa.pub /etc/apk/keys
apk add /home/apk/packages/main/$(uname -m)/*.apk

感谢并赞扬“公关:https://github.com/xentec”的作者

编辑: Dockerfile代码段

由于您的问题提到了Docker,这里有一个可以插入的RUN命令:

代码语言:javascript
复制
# Temporary workaround for there not being an llvm6 apk yet
# Open PR for llvm6 package: https://github.com/alpinelinux/aports/pull/3583
# See https://stackoverflow.com/questions/50258121/building-llvm-6-under-linux-alpine
RUN export BUILD_DEPS='alpine-sdk git diffutils' \
 && apk update \
 && apk add $BUILD_DEPS \
 && adduser -D apk \
 && adduser apk abuild \
 && sudo -iu apk abuild-keygen -a \
 && sudo -iu apk git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports \
 && sudo -iu apk sh -xec 'cd aports/main/llvm6; abuild -r' \
 && cp /home/apk/.abuild/*.rsa.pub /etc/apk/keys \
 && apk add /home/apk/packages/main/$(uname -m)/*.apk \
 && deluser --remove-home apk \
 && rm -rf /var/cache/apk/APKINDEX* \
 && apk del --no-cache $BUILD_DEPS
票数 4
EN

Stack Overflow用户

发布于 2018-10-31 09:58:11

我使用了Dan的代码并将其推送到DockerHub。

由于本地构建需要一段时间,所以预先构建的映像可能对某些人有用:)

py36 36-高寒-llvm6 6(DockerHub)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50258121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档