背景描述:
库A开发最初是以静态库形式存在,随着时间推移项目功能逐渐增多,涉及库A的内容也增多。组内成员开发各有习惯,QtCreator和VS2015未作限制。
现象:
- VS2015编辑器下正常编译和使用,使用QtCreator进行库A编译时发现无法编译成功,错误信息Lnk2019;
- 主动修改库A为动态库(.pro文件去除CONFIG += staticlib),只生成dll而无lib文件;
现象a原因和解决方案:
原因:库A部分组件加载时涉及C++和C底层库,VS编译时可由VS编译环境完成查找和链接,Qtcreator编译则缺少对应链接信息,导致报错Lnk2019;
解决方案:找到对应链接库,写入到.pro文件链接路径即可;
现象b原因和解决方案:
原因:动态库导出需要包含dllexport信息,静态编译时此部分直接忽略,转动态库时完全忘记还有此项内容。。。。
解决方案:如下添加动态链接信息即可;
#ifdef WIN32
#ifdef MYLIBRARY_EXPORT_DEF
#define MYLIBRARY_EXPORT __declspec(dllexport)
#else
#define MYLIBRARY_EXPORT __declspec(dllimport)
#endif
#else
#define MYLIBRARY_EXPORT
#endif
#ifdef WIN32
#ifdef MYLIBRARY_API_DEF
#define MYLIBRARY_API __declspec(dllexport)
#else
#define MYLIBRARY_API __declspec(dllimport)
#endif
#else
#define MYLIBRARY_API
#endif