我使用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,我可以轻松解决链接器错误。
但是,鉴于我的应用程序永远不会实际调用它,我可以让链接器快乐地继续前进(并且如果我曾经调用它,可能让应用程序抛出一个大的结构化异常)?
但是,鉴于我的应用程序永远不会实际调用它
然而,静态库中的函数会调用它,这就是你需要QT+=sql
的原因。
听起来你想传递链接器标志,如--allow-shlib-undefined
(假设GNU链接器)。您可能需要自己手动将其添加到QMAKE_LFLAGS
。
我不确定这里的“结构化异常”是什么意思 - 如果调用了未定义的函数,你可以期望你的程序接收SIGSEGV
,这通常会导致核心转储。当然不是你可以轻易处理和继续的东西。
更好的策略是将您的库拆分为两个库:一个仅依赖于Qt Core,另一个用于Qt Sql。