Linux下创建与使用静态库
Linux静态库命名规则
Linux静态库命名规范,必须是"lib[your_library_name].a":lib为前缀,中间是静态库名,扩展名为.a。
创建静态库(.a)
(1) 将代码文件编译成目标文件.o(test.o)
命令:g++ -c test.cpp
(2) 通过ar工具将目标文件打包成.a静态库文件
命令:ar -crv libtest.a test.o
生成静态库test.a
使用静态库
Linux下使用静态库,只需要在编译的时候,指定静态库的搜索路径(-L选项)、指定静态库名(不需要lib前缀和.a后缀,-l选项)。
g++ test.cpp -L. -Itest
l -L:表示要连接的库所在目录
l -l:指定链接时需要的动态库,编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.a或.so来确定库的名称。
创建动态库(.so)
生成动态库
g++ -shared -fPIC test.cpp -o libtest.so
使用动态库
cp libtest.so /usr/lib
g++ TestDynamicLibrary.cpp -L. -ltest -o test
./test
vs2013创建动态库
(1)新建win32控制台应用程序
(2)应用程序类型选择静态库
(3) stdafx.h 头文件写函数声明, stdafx.cpp写函数定义
(4)右键项目,生成。在Debug目录下生成静态库。
测试静态库:
(1)新建win32控制台应用程序
(2)选择空项目
(3)添加源文件,写c++程序。
(4)将静态库文件夹下的stdafx.h和targetver.h文件和静态库lib文件三个都拷入到现在工程下的工程名目录下
(5)
#include <iostream> #include "stdafx.h" //头文件 #pragma comment (lib,"TestStaticLibrary")//添加静态库 using namespace std; int main() { cout << jiafa(1, 2) << endl; cout << jianfa(1, 2) << endl; return 0; }
vs2013动态库
(1)新建win32控制台应用程序
(2)应用程序类型选择动态库
(3) stdafx.h 头文件写函数声明
extern __declspec(dllexport) int add(int a, int b);
stdafx.cpp写函数定义
int add(int a, int b) { return a + b; }
(4)右键项目,生成。在Debug目录下生成静态库。在debug目录下,可以看见生成一个dll和lib
测试:
(1)新建win32控制台应用程序
(2)选择空项目
(3)添加源文件,写c++程序。
(4)将静态库文件夹下的stdafx.h和targetver.h文件和静态库lib文件三个都拷入到现在工程下的工程名目录下
(5)TestDLL.dll拷贝到debug文件夹下,和exe在同一目录,不然运行时候找不到动态库
#include <iostream> #include "stdafx.h" //头文件 #pragma comment (lib,"TestDLL.lib")//添加静态库 using namespace std; int main() { cout << add(1, 2) << endl; return 0; }