linux 的共享库(shared library)
linux 下的共享库就是普通的 elf 共享对象。
共享库版本更新应该保证二进制接口 abi(application binary interface)的兼容
命名 libname.so.x.y.z
x:主版本号,不同主版本号的库之间不兼容,需要重新编译
y:次版本号,高版本号向后兼容低版本号
z:发布版本号,不对接口进行更改,完全兼容
路径 大部分包括 linux 在内的开源系统遵循 fhs(file hierarchy standard)的标准,这标准规定了系统文件如何存放,包括各个目录结构、组织和作用。
/lib:存放系统最关键和最基础的共享库,如动态链接器、c 语言运行库、数学库等
/usr/lib:存放非系统运行时所需要的关键性的库,主要是开发库
/usr/local/lib:存放跟操作系统本身并不十分相关的库,主要是一些第三方应用程序的库
动态链接器会在 /lib、/usr/lib 和由 /etc/ld.so.conf 配置文件指定的,目录中查找共享库
环境变量 ld_library_path:临时改变某个应用程序的共享库查找路径,而不会影响其他应用程序
ld_preload:指定预先装载的一些共享库甚至是目标文件
ld_debug:打开动态链接器的调试功能
so 共享库的编写 使用 clion 编写共享库
创建一个名为 mysharedlib 的共享库
cmakelists.txt
cmake_minimum_required(version 3.10)project(mysharedlib)set(cmake_cxx_standard 11)add_library(mysharedlib shared library.cpp library.h) library.h
#ifndef mysharedlib_library_h#define mysharedlib_library_h// 打印 hello world!void hello();// 使用可变模版参数求和template t sum(t t){ return t;}template t sum(t first, types ... rest){ return first + sum(rest...);}#endif library.cpp
#include #include library.hvoid hello() { std::cout << hello, world! << std::endl;} so 共享库的使用(被可执行项目调用) 使用 clion 调用共享库
创建一个名为 testsharedlib 的可执行项目
cmakelists.txt
cmake_minimum_required(version 3.10)project(testsharedlib)# c++11 编译set(cmake_cxx_standard 11)# 头文件路径set(inc_dir /home/xx/code/clion/mysharedlib)# 库文件路径set(lib_dir /home/xx/code/clion/mysharedlib/cmake-build-debug)include_directories(${inc_dir})link_directories(${lib_dir})link_libraries(mysharedlib)add_executable(testsharedlib main.cpp)# 链接 mysharedlib 库target_link_libraries(testsharedlib mysharedlib) main.cpp
#include #include library.husing std::cout;using std::endl;int main() { hello(); cout << 1 + 2 = << sum(1,2) << endl; cout << 1 + 2 + 3 = << sum(1,2,3) << endl; return 0;} 执行结果
hello, world!1 + 2 = 31 + 2 + 3 = 6 今天的分享就到这里了,大家要好好学c++哟~
半导体用电子气体国产化呼声日益增高
为什么5G手机大多数重量很重?
影响PCB焊接质量的因素 画PCB时的建议
高通下一款骁龙高端处理器将采用7nm制程
卧式剥离试验机,你知道有哪些品牌制造厂家吗?科准、星汇、新淮
C++基础语法知识之链接装载库中Linux 的共享库
计算机系统讲解(上)
电源设备中噪声滤波器的作用
如何修改CAD快捷键?
一文读懂VLAN和VXLAN技术
Oculus Quest会让Facebook坚信VR的未来终将到来
艾睿电子荣膺信息周刊精英100殊荣
LED照明驱动厂商:佛山市南海赛威科技技术有限公司简介
【解决方案】变电站运维平台解决方案
基于单片机的数码管静态及动态显示
人工智能结合医疗给医疗行业注入新的血液
乌兹别克斯坦发布电力2030计划,将部署300兆瓦储能设施
TCL黄金曲面电视55P3:画质表现出众,是一款值得推荐的主流大屏电视
人工智能在医疗健康行业的哪些方面发挥着重要作用
什么是DIY?