VS编译动态链接库--小结

  今天编译/调用一个动态库折腾了很久。明明lib/dll编译成功了,但是被调用时,死活都报“函数符号找不到的”的错误。检查了好几遍lib/h文件路径设置是否ok,有无正确引用。都没有问题。来回折腾了我2个小时,最后发现原因是:导出函数定义和声明的规格不一致。为了避免犯这种低级小错误,在这里对VS编译动态库,编译的2种方法和注意事项,备忘一下。

 为了能被其他程序正确调用链接,需要编译出dll动态库和相应的lib符合文件。有两种方法:

1/ 配置def文件:(linker-》input-》module define file)。

def可以同时输出dll和lib,但是dllexport方式,对C函数,经常只有dll无法生成lib,对导出类,dllexport可以生成dll和lib。

DLL中导出函数的两种方式(dllexport与.def文件):http://blog.csdn.net/lostyears/article/details/8482638

动态链接库全面浅析(一)-----Win32 动态链接库:http://blog.csdn.net/zhaodan19861107/article/details/7919359

2/关键字_declspec(dllexport)显示声明:

动态链接库导出C++类:http://blog.csdn.net/talentluke/article/details/6438049

头文件:

#ifdef _CLASSINDLL

  #define CLASSINDLL_CLASS_DECL __declspec(dllexport)

  #else

  #define CLASSINDLL_CLASS_DECL __declspec(dllimport)

  #endif

 //将类声明改为:

class CLASSINDLL_CLASS_DECL CInDLL

cpp文件:

在实现这个类的CPP文件的顶部加入#define _CLASSINDLL语句,然后include头文件。

  #define _CLASSINDLL

     #include "CInDLL.h"

这样一来在使用这个类时就可以不做任何改动了。我上面犯的错误正是因为函数实现cpp中没有包含对外头文件。

你可能感兴趣的:(VS编译动态链接库--小结)