您的位置:首页 > 其它

VS2013生成lib和.dll并使用

2018-03-11 23:11 627 查看
(1) .dll .obj .lib使用在windows平台下。

.dll:动态链接库,作为共享函数库的可执行文件。

.obj:目标文件,相当于源代码对应的二进制文件,未经重定位。

.lib:可理解为多个obj的集合,本质与.obj相同。


(2) .so .o .a使用在linux平台下。

.so:(share object)动态链接库,跟Windows平台类似。

.o: 目标文件,相当于源代码对应的二进制文件。

.a: 与.o类似,多个.o的集合。


参考链接

============================================================================

在VS(2013)下生成.lib文件步骤如下:

1.新建一个VS项目,Win32控制台应用程序。应用程序类型勾选静态库。附加项选择空项目等。

然后就完成了。



然后随便写个.h文件和.cpp文件。我的代码如下:

//testLib.h
#include <iostream>
class testLib{
public:
void print();
};


//testLib.cpp
#include "testLib.h"

using std::cout;

void testLib::print(){
cout << "this is a lib test";
}


然后左边解决方案下面右击项目名,生成,如果没报错的话,就会生成一个libTest.lib了。如图:



然后如果要在别的项目里用,就需要在别的项目里引入.lib里所需的.h文件。

右击我图里的MyCpp项目,然后在下面图里的地方把.h文件包含后确定,或者直接拷贝.h文件到你当前项目的工作目录下。



然后还需要把.lib按照下图步骤给包含到当前项目里。



这样,就会按照下图所示,完成.lib的使用。



========

对于.dll文件。VS里也可以参照.lib创建的方式,创建的时候勾选DLL,但是必须要选预编译头。能看到dllTest项目目录如下:



当然,我们如果在勾选DLL的同时,勾选导出符号,那么系统会自动创建一个对应dllTest.cpp的dllTest.h,这样更方便,所以还是勾选下到处符号。

遇到新建的.cpp文件使用方法出现“不允许 dllimport 函数”时,记得在工程属性里的预定义宏添加上MYDLL_EXPORTS这种东西。

先帖代码:

//myDll.h
#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif

#include <iostream>
class MYDLL_API myDll{
public:
void print();
int test();
};

MYDLL_API int testFunc(void);


//myDll.cpp
#include "stdafx.h"  //必须要加这个头文件
#include "myDll.h"
void myDll::print(){
std::cout << "myDLL test" << std::endl;
}
int myDll::test(){
return 10;
}
MYDLL_API int testFunc(void)
{
return 42;
}


然后生成:

正在创建库 F:\C++\MyCpp\Debug\dllTest.lib 和对象 F:\C++\MyCpp\Debug\dllTest.exp
1>  dllTest.vcxproj -> F:\C++\MyCpp\Debug\dllTest.dll


成功,然后就可有使用了,但是得先去配置下工作目录,和DLL几乎一样。

只不过在使用的时候,需要额外加上#pragma comment(lib,”dllTest.lib”)这种代码。

//main.cpp
//#include <crtdbg.h>
#include <iostream>
using namespace std;
//#include "MyCode/LinearList/ListTest.h"
//#include "MyCode/LinearList/LinkTest.h"
#pragma comment(lib,"dllTest.lib") //我的dll所对应的lib。

//#include "testLib.h"
//#include "dllTest.h"
#include "myDll.h"
int main(){
myDll mydll;
mydll.print();
cout << mydll.test() << endl;
cout << testFunc() << endl;
return 0;
}


打印输出结果如下图:



大功告成!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: