VS2013生成lib和.dll并使用

(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;
}

打印输出结果如下图:
这里写图片描述

大功告成!
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_21031727/article/details/79519497
今日推荐