Linux下动态库的生成和使用
来源:互联网 发布:unity3d骰子转动 编辑:程序博客网 时间:2024/05/21 06:50
本小猿最近工作于Linux下服务器的开发,记录Linux环境下的点滴成长。
一.动态库的基本概念
1. 动态链接库是程序运行时加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态链接库是目标文件的集合,目标文件在动态链接库中的组织方式是按照特殊方式形成的。库中函数和变量的地址是相对地址,不是绝对地址,其真实地址在调用动态库的程序加载时形成。
2. 动态链接库的名称有别名(soname), 真名(realname)和链接名(linker name)。别名由一个前缀lib,然后是库的名字,再加上一个后缀“.so”构成。真名是动态链接库真实名称,一般总是在别名的基础加上一个小版本号,发布版本等构成。除此之外,还有一个链接名,即程序链接时使用的库的名字。
3.在动态链接库安装的时候,总是复制文件到某个目录下,然后用一个软连接生成别名,在库文件进行更新的时候,仅仅更新软链接即可。
二.动态库的生成与使用逻辑
1. 第一步,将源文件编译成中间代码文件,Windows下文件格式为.obj,Unix下文件格式为.o;
2. 第二步,生成动态库.so文件;
3. 第三步,使用动态库。
三.实例描述,并写成makefile文件
#include"test.h"#include<iostream>using namespace std;int main(){int a,b;cin>>a>>b;int c = add(a,b);cout<<c<<endl;return 0;}
3)test.h文件中的内容:
#ifndef __TEST__#define __TEST__extern int add(int a, int b) ;extern int sub(int a, int b) ;#endif
4)test.cpp文件中的内容:
#include"test.h"#include<iostream>int add (int a, int b){std::cout<<"a :"<<a<<" b: "<<b<<std::endl;return (a+b);}int sub(int a, int b){return (a - b);}
动态库的生成
1>首先生成目标文件,但是此时要加编译器选项-fpic和链接器选项-shared,
g++ -fpic -c test.cpp
生成中间文件test.o
2>其次生成动态库
gcc -shared –o libtest.so test.o
生成动态库test.o就是我们生成的目标动态库。我们以后使用动态库和main.ocpp程序生成可执行程序
说明:
以上两步也可以合成一步搞定:
g++ -shared -fPIC -o libtest.so test.cpp
3>使用动态库:
g++ -o main -L . -ltest main.cpp
libtest.so:test.cpp test.hg++ -shared -fPIC -o libtest.so test.cppall:libtest.so main.cppg++ -o main -L . -ltest main.cpprun:allLD_LIBRARY_PATH=. ./mainclean:rm -rf *.o *.so main
- Linux下动态库生成和使用
- linux下生成和使用动态库
- Linux下动态库生成和使用
- Linux 下 动态链接库 .so 的生成和使用
- Linux下动态库的生成和使用
- Linux下动态库的生成和使用
- Linux下C++动态库的生成和使用
- Linux下动态库的生成和使用
- Linux下动态库的生成和使用
- Linux下动态库的生成和使用
- linux下动态库的生成和使用
- linux 动态库的生成和使用
- Linux下生成和使用/静态和动态库
- linux下生成,使用静态和动态链接库
- Linux下静态库文件和动态库文件的生成和使用
- Linux环境下动态库的生成和使用 (.so文件)
- linux下Eclipse进行C编程时动态链接库的生成和使用
- Linux下动态库(*.so)的生成和使用 [2014-01-02更新]
- CSS解决部分浏览器块状元素由于边框占用一定宽度导致换行的问题
- 2013_Signal-Processing-Image-Communication泛读
- 实例详解:反编译Android APK,修改字节码后再回编译成APK
- 编程之美2015资格赛--题目1 : 2月29日
- 基本类型和应用类型
- Linux下动态库的生成和使用
- 排序算法的时间复杂度和空间复杂度
- 理解 position:relative 与 position:absolute
- Android Fragment 你应该知道的一切
- android 从webview中读取缓存的图片
- 合在页高速缓存里面的缓冲区高速缓存
- SSH-keygen免秘钥登录
- python学习笔记
- 类似微信未读消息的头像标记