提问人:Techniquab 提问时间:4/11/2019 最后编辑:Mike KinghanTechniquab 更新时间:4/12/2019 访问量:289
在 qmake 中允许未定义的符号
Allowing undefined symbols in qmake
问:
我使用 qmake 和 .pro 文件来生成我的 VisualStudio .vcxproj 文件。
我创建了一个静态库,其中包含用于所有错误处理的辅助函数。这包括用于从 QSqlTableModel 和 QSqlQuery 中获取错误代码的包装器。
为了支持这些方法,我的库项目有 QT += sql。
我试图避免将 QT += sql 依赖项添加到链接库但不使用 sql 的应用程序。
我已将QSqlTableModel和QSqlQuery作为指针传递到库中,并向前声明它们,因此我可以毫无问题地进行编译。
但是我收到链接器错误未解析的外部符号“__declspec(dllimport) public: class QSqlError __cdecl QSqlQueryModel::lastError(void)const ”
我可以通过将 QT += sql 添加到我的应用程序来轻松解决链接器错误。
但是,鉴于我的应用程序永远不会实际调用它,我是否可以让链接器愉快地继续前进(如果我曾经调用过它,也许会让应用程序抛出一个大的结构化异常)?
答:
但是,鉴于我的应用程序永远不会实际调用它
但是,静态库中的函数将调用 this,这就是您需要 .QT+=sql
听起来你想传递链接器标志,例如(假设 GNU 链接器)。您可能需要自己手动添加它。--allow-shlib-undefined
QMAKE_LFLAGS
我不确定你在这里所说的“结构化异常”是什么意思 - 如果调用了一个未定义的函数,你可以期望你的程序收到 ,这通常会导致核心转储。当然不是您可以轻松处理和继续的事情。SIGSEGV
更好的策略是将库拆分为两个库:一个仅依赖于Qt Core,另一个用于Qt Sql。
评论