我们目前遇到了最新的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
答案 0 :(得分:0)
这是statx用于生成相应cpp文件的MOC系统调用的错误。在默认的受限配置中,docker使用seccomp来阻止或允许某些系统调用,这不允许使用statx系统调用。有关允许的系统调用,请参阅this。
已经在archlinux bugtracker,qt bugtracker和docker bugtracker上报告了此错误,但没有(永久)解决方案。
解决方案1:
根据{{3}}建议,使用docker run --security-opt seccomp:unconfined
运行您的泊坞窗容器。
解决方案2:
修补或降级以从qt。