我正在尝试使用xmlpatterns-private
。我可以通过添加qt += xmlpatterns-private
来获取标题。但是,当我编译时会出现错误:
对QPatternist :: XsdSchemaResolver ::〜XsdSchemaResolver()的未定义引用
因此,这意味着找到了标头,但是lib没有安装我的Qt环境。如何在Qt中安装或添加这样的私有模块,而不是编译整个Qt源?我猜想我将拉xmlpatterns
源并将其编译,并将其放入某个文件夹...换句话说,如何执行私有模块的安装。
我尝试过的事情:
qtxmlpatterns.pro
CONFIG+=xml-schema
中添加qtxmlpatterns.pro
mingw32-make install
更新:
找不到该功能是因为Qt没有使用Q_XMLPATTERNS_EXPORT
导出它。
因此,我将整个xmlpatterns
源而不是qt += xmlpatterns-private
导入我的项目。 cpp已经成为项目的一部分,为什么仍找不到该功能。
错误:对'_imp___ZN12QXmlNamePoolC1Ev'的未定义引用
整个项目:https://drive.google.com/drive/folders/1B2YEz1iUHdbZ-F3ukBRpjZ9eP012Jkez?usp=sharing
答案 0 :(得分:0)
#ifndef Q_XMLPATTERNS_EXPORT
# ifndef QT_STATIC
# if defined(QT_BUILD_XMLPATTERNS_LIB)
# define Q_XMLPATTERNS_EXPORT Q_DECL_EXPORT
# else
# define Q_XMLPATTERNS_EXPORT Q_DECL_IMPORT
# endif
# else
# define Q_XMLPATTERNS_EXPORT
# endif
#endif
...
# ifdef Q_OS_WIN
# define Q_DECL_EXPORT __declspec(dllexport)
# define Q_DECL_IMPORT __declspec(dllimport)
...
未定义的参考 `QPatternist :: XsdSchemaResolver ::〜XsdSchemaResolver()'
这是因为XsdSchema...
不是__declspec(dllexport)
。
Qt有很多私有类是不可见的API。
因此,如果我用作lib,则找不到引用。
如果我用export关键字修改所有必需的类。它想解决错误。
(不确定)
我将整个源代码导入项目中,而不是使用lib。 它给出了
错误:对'_imp___ZN12QXmlNamePoolC1Ev'的未定义引用
因为该类具有__declspec(dllimport)
,所以它告诉在要导入的库中找到引用。但是现在私有类实际上是源代码的一部分(当然,我没有导入它是未定义的)。
删除__declspec(dllimport)
可解决问题(已确认,构建成功)。