我正在尝试在Linux Alpine Docker容器上构建Linux Alpine。
下面是我在这些指示之后所做的工作
apk add build-baseapk add pythonapk add zlibsvn co http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_600/final/ llvmsvn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_600/final/ clangsvn 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我是不是遗漏了什么,比如依赖?或者这是一个已知的需要修复的bug?我该怎么做才能得到一个工作,最近的llvm + clang + libc++的Linux阿尔卑斯?
发布于 2018-05-11 18:36:02
在编写本报告时,有公开的拉动请求在aports中添加llvm6。因为它牵扯了很多补丁和微调,所以从源头上构建高山似乎并不容易。
因此,我们有充分的理由相信很快会有一个官方llvm6包,但在出现之前,您可以使用该PR中的APKBUILD自己构建llvm。
安装依赖项
https://wiki.alpinelinux.org/wiki/Abuild_and_Helpers是阿尔卑斯用于编译其包的实用工具。
apk add alpine-sdkdiffutils将自动安装您所需的大部分依赖项,但它在PR中的依赖列表中缺少它。
apk add diffutils不再是 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 -rabuild -r确实需要很长的时间,所以如果你正在跟进的话,现在可能是你午休的好时机。
安装结果包
如果一切都成功了,abuild将把一堆.apk文件放在$HOME/packages/main中。再次假设用户帐户名为apk,其主文件夹为/ home /apk,则作为root用户。
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命令:
# 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发布于 2018-10-31 09:58:11
https://stackoverflow.com/questions/50258121
复制相似问题