我使用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来轻松解决链接器错误。
但是,考虑到我的应用程序永远不会真正调用它,我是否可以使链接器愉快地前进(如果我曾经调用过该应用程序,也许它会抛出一个结构化异常)?
答案 0 :(得分:1)
但是,鉴于我的应用程序永远不会真正调用它
但是,静态库中的函数会 调用此函数,这就是为什么需要QT+=sql
。
答案 1 :(得分:0)
听起来您想传递链接器标志,例如--allow-shlib-undefined
(假设使用GNU链接器)。您可能需要手动将其添加到QMAKE_LFLAGS
中。
我不确定此处的“结构化异常”是什么意思-如果调用了未定义的函数,则可以期望程序接收到SIGSEGV
,这通常会导致核心转储。当然不是您可以轻松处理并继续的事情。
更好的策略是将您的库分成两个库:一个仅依赖Qt Core,另一个用于Qt Sql。