KDE目的构建仅在docker容器中失败

时间:2018-02-20 00:02:56

标签: docker gcc kde

我们目前遇到了最新的KDE / Archlinux版本的奇怪问题。 我们无法让KDE的目的框架在docker容器内编译,尽管它在我们的主机上运行良好。我们尝试用GCC和Clang编译它。

我们收到的错误是:

CMakeFiles/saveasplugin.dir/saveasplugin.cpp.o: In function `SaveAsShare::SaveAsShare()':
saveasplugin.cpp:(.text+0x81): undefined reference to `vtable for SaveAsShare'
CMakeFiles/saveasplugin.dir/saveasplugin.cpp.o: In function `SaveAsShare::~SaveAsShare()':
saveasplugin.cpp:(.text+0x113): undefined reference to `vtable for SaveAsShare'
CMakeFiles/saveasplugin.dir/saveasplugin.cpp.o: In function `SaveAsShare::~SaveAsShare()':
saveasplugin.cpp:(.text+0x133): undefined reference to `vtable for SaveAsShare'
collect2: error: ld returned 1 exit status
make[2]: *** [src/plugins/saveas/CMakeFiles/saveasplugin.dir/build.make:122: bin/kf5/purpose/saveasplugin.so] Error 1
make[1]: *** [CMakeFiles/Makefile2:1149: src/plugins/saveas/CMakeFiles/saveasplugin.dir/all] Error 2
make: *** [Makefile:130: all] Error 2

您可以使用以下Dockerfile重现docker环境:

FROM archlinux/base
RUN pacman -Syu --noconfirm && pacman --noconfirm -S git base-devel cmake extra-cmake-modules asp sudo
RUN useradd -ms /bin/bash arch
RUN echo 'arch ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers
USER arch
WORKDIR /home/arch
RUN asp checkout purpose
WORKDIR /home/arch/purpose/trunk
RUN gpg --keyserver ipv4.pool.sks-keyservers.net --recv-keys 58D0EE648A48B3BB

(如果您只有IPv6可用且没有IPv4,则需要编辑第9行)

构建容器后运行它并执行makepkg -s --noconfirm

现在它将构建archlinux包,您将在链接阶段遇到上述错误。

我们目前甚至没有丝毫知道这个错误的原因是什么,因为它在我们的主机上没有任何问题。有什么想法吗?

我们还测试了不同的基础archlinux docker图像,例如pritunl / archlinux。

环境:
用途:5.43.0-1
海湾合作委员会:7.3.0
CLang:5.0.1-2

1 个答案:

答案 0 :(得分:0)

这是statx用于生成相应cpp文件的MOC系统调用的错误。在默认的受限配置中,docker使用seccomp来阻止或允许某些系统调用,这不允许使用statx系统调用。有关允许的系统调用,请参阅this

已经在archlinux bugtrackerqt bugtrackerdocker bugtracker上报告了此错误,但没有(永久)解决方案。

解决方案1:
根据{{​​3}}建议,使用docker run --security-opt seccomp:unconfined运行您的泊坞窗容器。

解决方案2:
修补或降级以从qt。

中删除statx系统调用