在qmake中允许未定义的符号

时间:2019-04-11 15:27:39

标签: qt static-libraries linker-errors 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来轻松解决链接器错误。

但是,考虑到我的应用程序永远不会真正调用它,我是否可以使链接器愉快地前进(如果我曾经调用过该应用程序,也许它会抛出一个结构化异常)?

2 个答案:

答案 0 :(得分:1)

  

但是,鉴于我的应用程序永远不会真正调用它

但是,静态库中的函数会 调用此函数,这就是为什么需要QT+=sql

答案 1 :(得分:0)

听起来您想传递链接器标志,例如--allow-shlib-undefined(假设使用GNU链接器)。您可能需要手动将其添加到QMAKE_LFLAGS中。

我不确定此处的“结构化异常”是什么意思-如果调用了未定义的函数,则可以期望程序接收到SIGSEGV,这通常会导致核心转储。当然不是您可以轻松处理并继续的事情。

更好的策略是将您的库分成两个库:一个仅依赖Qt Core,另一个用于Qt Sql。