我正在尝试在llvm 6
Docker容器上构建Linux Alpine
。
以下是我在these instructions之后所做的事情:
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
时,稍后它会死于以下内容:
[ 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
我错过了什么,比如依赖?或者这是一个需要修复的已知错误?我应该怎样做才能在Linux Alpine上获得最新的llvm
+ clang
+ libc++
答案 0 :(得分:4)
在撰写本文时,有an open pull request将llvm6添加到aports。因为它involves有很多补丁和调整,所以从阿尔卑斯山的源头构建起来似乎并不容易理解。
所以,我们完全有理由相信很快就会出现official llvm6 package,但在出现之前,您可以使用该PR中的APKBUILD从源代码构建llvm。
安装依赖关系
abuild是Alpine用于编译其包的实用程序。
npm install rxjs@6 rxjs-compat@6 --save
abuild 将自动安装您需要的大部分依赖项,但PR中的依赖项列表中缺少apk add alpine-sdk
。
diffutils
停止 root
abuild 拒绝以 root 身份运行,因此如果您还没有,请创建一个用户帐户。我正在使用用户名 apk :
apk add diffutils
克隆PR并编译
adduser apk
adduser apk abuild
su - apk
abuild-keygen -a
git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports
cd aports/main/llvm6
abuild -r
确实需要很长时间,所以如果你一直跟进,现在可能是午休的好时机。
安装生成的软件包
如果一切顺利, abuild 将在$ HOME / packages / main中放置一堆.apk文件。再次假设用户帐户名为 apk ,其主文件夹为 / home / apk ,然后以root身份
abuild -r
感谢并感谢PR的作者:https://github.com/xentec
编辑:Dockerfile代码段
由于你的问题提到了Docker,这里有一个cp /home/apk/.abuild/*.rsa.pub /etc/apk/keys
apk add /home/apk/packages/main/$(uname -m)/*.apk
命令你可以插入:
RUN
答案 1 :(得分:0)
我使用了Dan的代码并将其推送到DockerHub。
由于在本地构建需要花费一些时间,因此预构建的映像可能对某些用户有用:)
py36-alpine-llvm6(DockerHub)