moc在Docker容器中使用Qt 5.10的“未定义接口”失败

时间:2018-01-30 03:12:42

标签: qt docker

一个非常简单的Qt项目无法使用Qt 5.10在Docker容器中构建(具有从opensuse:tumbleweed派生的图像)。该项目如下:

sh-4.4# cat test.pro
TEMPLATE = app
TARGET = test
INCLUDEPATH += .
INCLUDEPATH += sub
HEADERS = obj.h sub/iface.h
SOURCES = obj.cpp main.cpp

sh-4.4# cat sub/iface.h
#pragma once

#include <QtPlugin>

class Interface
{
public:
        virtual ~Interface () {}
};

Q_DECLARE_INTERFACE (Interface, "org.meh.interface/1.0")

sh-4.4# cat obj.h
#pragma once

#include <QObject>
#include <sub/iface.h>

class Obj : public QObject
{
        Q_OBJECT
        Q_INTERFACES (Interface)
};

sh-4.4# cat obj.cpp
#include "obj.h"

sh-4.4# cat main.cpp
int main() {}

在这种情况下,moc抱怨如下:

obj.h:9: Error: Undefined interface

在Qt 5.9的另一个容器中一切都很好,当项目在openSUSE Build Service(使用其他东西而不是Docker)中构建时,Qt 5.10的一切都很好。一些快速谷歌搜索没有透露最近的Qt版本的任何相关的bug报告。

可能出现什么问题?

2 个答案:

答案 0 :(得分:0)

在strace下运行moc会在Operation not permitted次调用中显示statx,这可以解释为什么它会失败(也与this问题有关)。 This拉取请求有望解决此问题。

答案 1 :(得分:0)

您是否尝试使用--privileged运行容器(请参见Which capabilities are needed for statx to stop giving EPERM)?