问题描述如下:
明明已经加了导出符,为啥还会链接不到呢??
class Q_DECL_EXPORT OctreeTerrain : public QObject
{
QOBJECT
}
编译错误如下图所示。
在主工程中加上qt项目对应的moc文件后,编译通过
虽然编译通过了,但是我并不想每次都手动加上Moc文件,解决方案如下:
解决方法:
在网上查了半天,加上和同事讨论,大概知道问题出在哪里,可参考该链接。
原因分析:qt对象由于包含QOBJECT宏的原因,会生成moc文件,转换成标准的c++语言,所以主工程加上moc文件就能找到函数了,去掉就找不到,出现链接错误。因此不仅要在生成dll时加入导出符,还必须在调用dll时,要加上导入符,明确告诉调用者函数在该dll里。
解决办法:将导出符换成下面形式就ok了。FJ_FOREST_ALG_EXPORT宏在qt的dll项目中为导出符,再主程序中为导入符。
#include <QtCore/qglobal.h>
#if defined(FJ_FOREST_ALG_LIBRARY)
# define FJ_FOREST_ALG_EXPORT Q_DECL_EXPORT
#else
# define FJ_FOREST_ALG_EXPORT Q_DECL_IMPORT
#endif