首页 / 行业
C++基础语法知识之链接装载库中Linux 的共享库
2021-11-01 10:15:00
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
// 打印 Hello World!
void hello();
// 使用可变模版参数求和
template <typename T>
T sum(T t)
{
return t;
}
template <typename T, typename ...Types>
T sum(T first, Types ... rest)
{
return first + sum
(rest...); }
library.cpp
void 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(TestSharedLibMySharedLib)
main.cpp
using 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;
}
执行结果
World!
1 + 2 = 3
6 =
今天的分享就到这里了,大家要好好学C++哟~
编辑:jq最新内容
手机 |
相关内容
低耗能,小安派-LRW-TH1传感器通用板
低耗能,小安派-LRW-TH1传感器通用板,一块板即可连接多种传感器!,传感器,多种,连接,一块,通用,接口,小安派-LRW-TH1传感器通用板是一款应用在阀门控制中的直流有刷驱动芯
应用在阀门控制中的直流有刷驱动芯片,芯片,控制,支持,远程控制,电动,调节,直流有刷驱动芯片是一种用于控制直流电机的IPB072N15N3G浅析可配置混合信号芯片
浅析可配置混合信号芯片,芯片,信号,混合,配置,灵活性,性能,MC33072DR2G可配置混合信号芯片是一种集成电路(IC),它包含了数字和模拟电路用于传感器接口设计的运算放大器,哪
用于传感器接口设计的运算放大器,哪几项特性最为关键?,运算放大器,几项,传感器,接口设计,用于,输出,在传感器接口设计中,HT1622运算放什么是串口服务器,串口服务器的组成
什么是串口服务器,串口服务器的组成、特点、原理、分类、常见故障及预防措施,服务器,串口,分类,远程访问,预防,接口,TLC27M2CDR串口如何选择激光测距传感器?
如何选择激光测距传感器?,传感器,激光,需求,输出,选择,测量,选择MAX3485EESA+T激光测距传感器时,需要考虑一系列因素,包括测量范围、测什么是无刷电机控制器,无刷电机控制
什么是无刷电机控制器,无刷电机控制器的组成、特点、原理、分类、常见故障及预防措施,控制器,分类,位置,监测,传感器,控制,无刷电机步进电机用什么控制 如何选择步进
步进电机用什么控制 如何选择步进电机驱动器,控制,用什么,步进电机,通信接口,选择,复杂性,步进电机可以通过IRF9Z24NPBF控制器来控