1

我正在尝试使用xmlpatterns-private. 我可以通过添加来获取标题qt += xmlpatterns-private。但是当我编译它给出了错误:

未定义对“QPatternist::XsdSchemaResolver::~XsdSchemaResolver()”的引用

所以它假设意味着找到了头文件,但 lib 没有安装我的 Qt 环境。如何在 Qt 中安装或添加这样的私有模块而不是编译整个 Qt 源?我猜我应该拉取xmlpatterns源代码并编译它,把它放到某个文件夹中......换句话说,如何执行私有模块的安装。

我尝试了什么:

  1. 下载 Qt 5.13 源代码
  2. qtxmlpatterns.pro在 QtCreator 中打开
  3. 加入CONFIG+=xml-schema_qtxmlpatterns.pro
  4. 建造
  5. 转到构建文件夹并运行mingw32-make install
  6. 重建我的项目,但给出了同样的错误......

更新:

找不到该函数是因为 Qt 没有使用Q_XMLPATTERNS_EXPORT.

所以我将整个xmlpatterns源代码导入到我的项目中,而不是qt += xmlpatterns-private. cpp 已经是项目的一部分,为什么仍然找不到该功能。

错误:未定义对 `_imp___ZN12QXmlNamePoolC1Ev' 的引用

整个项目:https ://drive.google.com/drive/folders/1B2YEz1iUHdbZ-F3ukBRpjZ9eP012Jkez?usp=sharing

4

1 回答 1

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,则无法找到参考。如果我用导出关键字修改所有必要的类。它应该解决错误。(未确认)

我没有使用 lib,而是将整个源代码导入到项目中。它给

错误:未定义对 `_imp___ZN12QXmlNamePoolC1Ev' 的引用

因为类__declspec(dllimport)告诉它要在应导入的库中找到引用。但是现在私有类实际上是源代码的一部分(当然,它是未定义的,我没有导入它)。删除__declspec(dllimport)解决它(确认,构建成功)。

于 2019-07-21T08:49:23.467 回答