本人自从正式踏入软件这行以来,就一直在Linux下摸爬滚打,没有在Windows平台正式编写过程序。
不过,最近,公司要把C++代码迁移到Windows下,本来没有小编的事(小编从来都是写些算法的,不管与平台有关的活)。但是前不久,小编为了求解二次规划的问题,特意下载了SparseLib++这个稀疏矩阵库。但是这个库没有提供SparseLib.def文件。在Visual Studio中生成SparseLib.dll时,没有看到相应的用于链接的SparseLib.lib文件。这可急坏了小编。
小编用Visual Studio Tools中的dumpbin命令查看SparseLib.dll
dumpbin /exports SparseLib.dll
不显示导出的函数和变量。这明显没有导出嘛。
之后,小编开始了搜索之旅,从Baidu到Bing(说心里话,查Windows有关的专业问题,Bing还是比Baidu靠谱的)。
主要的就是有两种方法指定exports:
- 手动写def文件,文件格式去MSDN看看;
- 在code中添加__declspec(dllexport)宏;
第一种方法,费事费力,export的函数那么多,我如何一个个写出。
第二种方法,只要从code的调用关系就可以确定哪些函数是需要的,所以我使用了这种方法。
第二种方法应用于三种情况:
- Class __declspec(dllexport) classname { /* class definition */ };
- __declspec(dllexport) returntype function(/* argument list */);
- __declspec(dllexport) extern Typ