这一阵子工作中用到了静态库和动态库的相关知识,自己以前还真的不是特别明白。趁着这个机会,在网上查找了一些和静态库,动态库编程相关的资料,小小的记录一下。Linux环境下的已经记录下来,现在写的windows环境下的静态库和动态库笔记。先说静态库。
和linux环境下的静态库一样,windows环境下的静态库文件也是一些目标文件的集合体。我们先看一看生成库文件的源文件的代码:
下面我们看一看如何使用这个库文件。使用VC编译器建立一个空工程,工程类型是控制台程序。添加一个文件testLibConsole.cpp文件到工程中。敲入如下代码:
和linux环境下的静态库一样,windows环境下的静态库文件也是一些目标文件的集合体。我们先看一看生成库文件的源文件的代码:
/* testlib.h */
#ifndef _TESTLIB_H_
#define _TESTLIB_H_
#ifdef __cplusplus
extern "C" {
#endif
int fun1();
int fun2();
#ifdef __cplusplus
}
#endif
#endif // _TESTLIB_H_
/* testlib.cpp */
#include <stdio.h>
#include "testlib.h"
int fun1()
{
return 1;
}
int fun2()
{
return 2;
}
使用VC编译器建立一个工程,指明要建立工程的类型是“Win32 Static Library”。进行编译链接,会生成一个名为testlib.lib的静态库文件。这个testlib.lib是VC编译器使用testlib.o文件链接生成的。我们这里只使用了一个目标文件。下面我们看一看如何使用这个库文件。使用VC编译器建立一个空工程,工程类型是控制台程序。添加一个文件testLibConsole.cpp文件到工程中。敲入如下代码:
#include <iostream>
#include "testlib.h"
using namespace std;
#pragma comment(lib,"testlib.lib")
int main()
{
printf("fun1() return value is %d\n",fun1());
printf("fun2() return value is %d\n",fun2());
return 0;
}
记得要将testlib.h头文件和testlib.lib库文件放在此工程的目录下,否则编译链接会失败。我们生成可执行文件testLibConsole.exe之后,就不需要这个testlib.lib库文件了。
参考网站:
http://www.functionx.com/visualc/libraries/staticlib.htm
http://www.functionx.com/visualc/libraries/staticdll.htm