2010年8月20日星期五

Bug Series_Programing_link error_unresolved external symbol

之前
最上层的基础库都是static library(.lib), 中间的core要是static library(.lib), 然后被应用层的main.cpp直接生成application.exe.

这么弄一直没有问题, 直到...
直到我想加入一个ImageEditor的plugin, 作为一个dynamic library(.dll)存在, 这个plugin需要使用core提供的interface来调用application里面的类和member function, 而core在里面也需要能检查到这个加入的plugin并使用它。

compilation没有问题,但是在link时候就出错了:

error LNK2019: unresolved external symbol "__declspec(dllimport) public ...

后来发现那个core作为static library是有问题,因为static library不能包含别的static library和dynamic library . 于是我把core作为dynamic library就ok了.

但是这样又引入了新的问题, dynamic library需要导出一些接口,别的.dll/.exe才能使用, 否则例如main.cpp和ImageEditor中就不能使用了。
于是就引入了__declspec attributes.

http://blog.csdn.net/alicehyxx/archive/2010/01/08/5161868.aspx
http://msdn.microsoft.com/zh-cn/library/9h658af8(v=VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/z4zxe9k8(v=VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/fdy23fx6(v=VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/a90k134d(v=VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/900axts6(v=VS.80).aspx

没有评论:

发表评论