在qmake中允许未定义的符号

问题描述 投票:0回答:2

我使用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 static-libraries linker-errors qmake
2个回答
1
投票

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

然而,静态库中的函数会调用它,这就是你需要QT+=sql的原因。


0
投票

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

我不确定这里的“结构化异常”是什么意思 - 如果调用了未定义的函数,你可以期望你的程序接收SIGSEGV,这通常会导致核心转储。当然不是你可以轻易处理和继续的东西。

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

© www.soinside.com 2019 - 2024. All rights reserved.