标签:
一、静态库的创建和使用
1. 静态库的创建
(1) 在VS2013中选择菜单->File->New->Project,选择Visual C++ ->Win32选项,然后点击Win32 Project图标,选择Win32 Application Wizard,选择Application type下的Static library选项。工程名字为TestStaticLib。
(2)在Solution Explorer的Header Files下新建一个test_header.h头文件
1 #ifndef TEST_HEADER_H_ 2 #define TEST_HEADER_H_ 3 4 #ifdef _WIN32 5 #ifdef _LIB 6 #define DECLSPEC __declspec(dllexport) 7 #else 8 #define DECLSPEC __declspec(dllimport) 9 #endif 10 #else 11 #define DECLSPEC 12 #endif 13 14 #endif
__declspec修饰符仅在Windows平台下有效。
__declspec(dllexport)的作用是将当前函数或者类导出,以便可以从DLL中调用。
__declspec(dllimport)的作用是在应用程序中可以使用导出的DLL函数或者类。
在VS2013编译器中新建一个Static library工程的时候,预定义了_LIB宏,所以上面的代码中
#define DECLSPEC __declspec(dllexport)是有效的。
(3) 在Solution Explorer的Header Files下新建一个Source.h文件
1 #ifndef SOURCE_H_ 2 #define SOURCE_H_ 3 #include "test_header.h" 4 5 DECLSPEC int MyFunction(int a,int b); 6 7 class DECLSPEC MyClass 8 { 9 public: 10 MyClass(int a, int b) : m_a(a), m_b(b){} 11 ~MyClass(); 12 int add(); 13 private: 14 int m_a; 15 int m_b; 16 }; 17 #endif
(4) 在Solution Explorer的Source Files文件夹下新建一个Source.cpp文件
1 #include "Source.h" 2 3 int MyFunction(int a,int b) 4 { 5 return a + b; 6 } 7 8 MyClass::~MyClass() 9 { 10 } 11 12 int MyClass::add() 13 { 14 return m_a + m_b; 15 }
(5) 编译工程,在工程目录的Debug文件夹下会生成TetsStaticLib.lib静态库文件。
2. 静态库的使用
(1)新建一个Win32 Console工程,名字为TestLib。
设置TestLib的工程属性
①Configuration Properties->C/C++->General->Additional Include Directories
D:\Program\C++Pro\TestStaticLib\TestStaticLib
②Configuration Properties->Linker->General->Additional Library Directories
D:\Program\C++Pro\TestStaticLib\Debug
③Configuration Properties->Linker->Input->Additional Dependencies
TestStaticLib.lib
(2)添加如下测试代码
1 #include "stdafx.h" 2 #include "Source.h" 3 #include <iostream> 4 using namespace std; 5 6 7 int _tmain(int argc, _TCHAR* argv[]) 8 { 9 int c = MyFunction(1, 2); 10 cout << c << endl; 11 12 MyClass cla(2, 4); 13 cout << cla.add() << endl; 14 system("pause"); 15 return 0; 16 }
(3) 编译运行生成的TestLib.exe,可以看到程序结果,这时将TestLib.exe拷贝到任意文件夹也可以运行。
标签:
原文地址:http://www.cnblogs.com/elitiwin/p/4298994.html