项目场景:
使用产品:SMO_CPP_801_13228_53527_Win
操作系统:win7 x64
问题描述:
error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: class UGC::UGMapEditorWnd * __cdecl QMapControl::GetUGMapWnd(void)" (__imp_?GetUGMapWnd@QMapControl@@QEAAPEAVUGMapEditorWnd@UGC@@XZ),该符号在函数 "private: void __cdecl Positioning_Gui_Application::ImportSites(class std::vector<·······"中被引用之前出现过一次类似的无法解析符号的错误(见前一篇),然后通过添加附加依赖项,解决了,这次又出现了,关键是这个程序是另一个程序拷贝过来的,之前运行成功过,说明已添加的依赖项是够的,所以这次不知道是什么原因了。
原因分析:
从supermap官网的技术问答社区其他类似问题有了启发,有人说,extension4QT需要在自个电脑上重新编译一遍,用新生成的dll和lib才适用于自己的电脑。我为什么会觉得是extension4QT的原因,是因为之前不少地方出错,在网上找都涉及extension4QT这个东西,而且需要自个儿重新编译的说法也不是第一次看见了,所以也是想着死马当活马医,就采取了重新编译的方法。
解决方案:
问题解决的思路是从supermap官网的技术问答社区其他类似问题处得到的,整体思路就是重新编译extension4qt,下面说一下具体编译方法:
- 在supermap找到sample->extensions4QT文件夹,打开里面的extensions4QT.pro(qt creator打开);
- 选择上方“构建”->“重新构建所有项目”,这样就会生在新的extension4qt.dll和.lib,这两个所在路径也好找(在sample->debug文件夹下面的x64);
- 然后将这两个路径确认添加在vs里面了(.dll是通过属性->调试->环境->path添加,.lib是通过属性->链接器->附加库目录添加)。
确定添加完毕,再调试就不会出现这个错误了。