我正在尝试llvm 6
在Linux Alpine
Docker容器上构建。
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
我是否缺少某些东西,例如依赖项?还是这是一个需要修复的已知错误?那我该怎么做才能得到一个工作,最近llvm
+ clang
+libc++
在Linux上高山?
在撰写本文时,有一个打开请求请求将llvm6添加到端口。因为它涉及许多补丁和调整,所以似乎很难从高山上从源代码进行构建。
因此,我们有充分的理由相信很快就会有一个官方的llvm6软件包,但是直到一个正式的llvm6软件包出现为止,您可以使用该PR中的APKBUILD自行从源中构建llvm。
安装依赖项
abuild是Alpine用来编译其软件包的实用程序。
apk add alpine-sdk
abuild将自动安装您需要的大多数依赖项,但是diffutils
PR的依赖项列表中缺少它。
apk add diffutils
不再是根
abuild拒绝以root身份运行,因此,如果尚未创建,请创建一个用户帐户。我正在使用用户名apk:
adduser apk
adduser apk abuild
su - apk
abuild-keygen -a
克隆PR并编译
git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports
cd aports/main/llvm6
abuild -r
abuild -r
确实,这将花费很长的时间,因此,如果您一直坚持下去,现在可能是午休的好时机。
安装生成的软件包
如果一切成功,abuild将在$ HOME / packages / main中放置一堆.apk文件。再次假设该用户帐户名为apk,其主文件夹为/ home / apk,然后以root身份
cp /home/apk/.abuild/*.rsa.pub /etc/apk/keys
apk add /home/apk/packages/main/$(uname -m)/*.apk
感谢PR的作者:https : //github.com/xentec
编辑:Dockerfile代码段
由于您的问题涉及Docker,因此RUN
您可以插入以下命令:
# 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句