静态函数库与动态函数库(共享库)的创建
来源:互联网 发布:node 错误处理 编辑:程序博客网 时间:2024/04/27 21:15
静态函数库的创建过程:
(1)生成 *.o文件;
[root@localhost mine]# ls
add.cpp add.h main.cpp sub.cpp sub.h
[root@localhost mine]# g++ -o add.o -c add.cpp
[root@localhost mine]# ls
add.cpp add.h add.o main.cpp sub.cpp sub.h
[root@localhost mine]# g++ -o sub.o -c sub.cpp
[root@localhost mine]# ls
add.cpp add.h add.o main.cpp sub.cpp sub.h sub.o
[root@localhost mine]# g++ -o main.o -c main.cpp
[root@localhost mine]# ls
add.cpp add.h add.o main.cpp main.o sub.cpp sub.h sub.o
[root@localhost mine]#(2)创建静态函数库
[root@localhost mine]# ar -cr libaddsub.a add.o sub.o
[root@localhost mine]# ls
add.cpp add.h add.o libaddsub.a main main.cpp main.o sub.cpp sub.h sub.o
[root@localhost mine]#
其中,ar是创建静态库的命令, -c表示create, -r表示replace,表示当插入的模块名已经在库中存在就替换同名的模块,若其中的一个模块在库中不存在,ar就显示错误信息,并且不替换其他同名模块;默认情况下,新的成员增加在库的末尾!
此刻静态函数库已经创建好了,可以安全使用了,使用方法如下所示喔~:~
[root@localhost mine]# g++ -o main main.cpp -L. -laddsub[root@localhost mine]# lsadd.cpp add.h add.o libaddsub.a main main.cpp sub.cpp sub.h sub.o[root@localhost mine]#
此处的-L指定静态函数库的位置供查找, “ .”表示在当前目录下查找;
-l 指定静态函数库名, 静态函数库名一般为libXXX.a,其中的lib和 .a 被忽略掉;
当静态函数库的内容被整合进编译后的文件后,即是删除掉静态函数库,那个可执行的二进制文件依然可以运行;如下所示:
[root@localhost mine]# lsadd.cpp add.h add.o libaddsub.a main main.cpp sub.cpp sub.h sub.o[root@localhost mine]# ./main a = 66b = 166[root@localhost mine]# rm -f libaddsub.a [root@localhost mine]# ./main a = 66b = 166[root@localhost mine]# lsadd.cpp add.h add.o main main.cpp sub.cpp sub.h sub.o[root@localhost mine]# ./main a = 66b = 166[root@localhost mine]#
动态函数库的创建:
(1)动态链接方法
(1)g++ -shared -o libaddsub.so add.cpp sub.cpp
生成动态库文件libaddsub.so(2)要先将生成的.so文件加入到 /lib64中,因为动态函数库被使用时,会先在/lib64下查找动态函数库;
(3)将libaddsub.so加入到/lib64后才能生成可执行二进制文件
g++ -o main main.cpp -laddsub
-laddsub是连接动态库
[root@localhost mine]# g++ -shared -o libaddsub.so add.cpp sub.cpp [root@localhost mine]# lsadd.cpp add.h libaddsub.so main.cpp sub.cpp sub.h[root@localhost mine]# g++ main -o main.cpp -laddsubg++: error: main: No such file or directory[root@localhost mine]# lsadd.cpp add.h libaddsub.so main.cpp sub.cpp sub.h[root@localhost mine]# g++ -o main main.cpp -laddsub/usr/bin/ld: cannot find -laddsubcollect2: error: ld returned 1 exit status[root@localhost mine]# lsadd.cpp add.h libaddsub.so main.cpp sub.cpp sub.h[root@localhost mine]# lsadd.cpp add.h libaddsub.so main.cpp sub.cpp sub.h[root@localhost mine]# mv libaddsub.so /lib64/Display all 2437 possibilities? (y or n)[root@localhost mine]# mv libaddsub.so /lib64/[root@localhost mine]# lsadd.cpp add.h main.cpp sub.cpp sub.h[root@localhost mine]# g++ -o main main.cpp -laddsub、/usr/bin/ld: cannot find -laddsub、collect2: error: ld returned 1 exit status[root@localhost mine]# g++ -o main main.cpp -laddsub[root@localhost mine]# lsadd.cpp add.h main main.cpp sub.cpp sub.h[root@localhost mine]# ./main a = 66b = 166[root@localhost mine]# \cp main /root/Desktop/[root@localhost mine]#
(2)动态加载方法
以下是所有的源代码:
//add.h#pragma onceint add(int x, int y);//add.cpp#include "add.h"int add(int x, int y){ return (x + y);}//sub.h#pragma onceint sub(int a, int b);//sub.cpp#include "sub.h"int sub(int a, int b){ return (a - b);}//main.cpp#include <iostream>#include "add.h"#include "sub.h"using namespace std;int main(){ int a, b; a = add(23, 43); b = sub(200, 34); cout <<"a = " << a << endl; cout <<"b = " << b << endl; return 0;}
- 静态函数库与动态函数库(共享库)的创建
- 静态函数库与动态函数库的设计
- Linux:静态函数库(.a)与动态函数库(.so)
- linux共享函数库的创建与使用
- 静态函数库和动态函数库的制作
- 静态函数库和动态函数库
- 静态函数库 和 动态函数库
- 函数库的创建和动态链接库
- linux下的静态函数库和动态函数库创建和使用
- 静态库,动态库是啥,有啥区别(静态函数库/动态函数库)
- 静态函数库与动态函数库区别、应用--ldconfig、ldd
- linux下的静态函数库和动态函数库
- linux下的静态函数库和动态函数库
- linux下的静态函数库和动态函数库
- 2-6 静态函数库和动态函数库的建立
- linux下的静态函数库和动态函数库
- 10.函数库-静态库和共享库
- Linux - 动态(Dynamic)与静态(Static)函数库
- 事务配置
- github--多人协作
- delphi中Message消息的使用方法
- FOR ALL ENTRIES的效率问题
- 《C++精英内参之程序员高效指南》-12-2影响效率的不良习惯之计划
- 静态函数库与动态函数库(共享库)的创建
- android常用开源项目
- leetcode 23. LeetCode Merge k Sorted Lists
- spring mvc CommonsMultipartResolver文件上传maxUploadSize限制大小
- printf使用技巧
- 知道 Hadoop 就够了?这九大技术你也必须了解!
- Linux中zip压缩和unzip解压缩命令详解
- erlang 优化
- mfc中UpdateData的用法