moc在Docker容器中使用Qt 5.10的“未定义接口”失败
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了moc在Docker容器中使用Qt 5.10的“未定义接口”失败相关的知识,希望对你有一定的参考价值。
一个非常简单的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报告。
可能有什么不对?
答案
在strace下运行moc
显示Operation not permitted
在各种statx
调用,这揭示了它为什么失败(也与this问题有关)。 This拉请求有望解决这个问题。
另一答案
您是否尝试使用--privileged
运行容器(请参阅Which capabilities are needed for statx to stop giving EPERM)?
以上是关于moc在Docker容器中使用Qt 5.10的“未定义接口”失败的主要内容,如果未能解决你的问题,请参考以下文章