Linux 的共享庫(Shared Library)
Linux 下的共享庫就是普通的 ELF 共享對(duì)象。
共享庫版本更新應(yīng)該保證二進(jìn)制接口 ABI(Application Binary Interface)的兼容
命名
libname.so.x.y.z
x:主版本號(hào),不同主版本號(hào)的庫之間不兼容,需要重新編譯
y:次版本號(hào),高版本號(hào)向后兼容低版本號(hào)
z:發(fā)布版本號(hào),不對(duì)接口進(jìn)行更改,完全兼容
路徑
大部分包括 Linux 在內(nèi)的開源系統(tǒng)遵循 FHS(File Hierarchy Standard)的標(biāo)準(zhǔn),這標(biāo)準(zhǔn)規(guī)定了系統(tǒng)文件如何存放,包括各個(gè)目錄結(jié)構(gòu)、組織和作用。
/lib:存放系統(tǒng)最關(guān)鍵和最基礎(chǔ)的共享庫,如動(dòng)態(tài)鏈接器、C 語言運(yùn)行庫、數(shù)學(xué)庫等
/usr/lib:存放非系統(tǒng)運(yùn)行時(shí)所需要的關(guān)鍵性的庫,主要是開發(fā)庫
/usr/local/lib:存放跟操作系統(tǒng)本身并不十分相關(guān)的庫,主要是一些第三方應(yīng)用程序的庫
動(dòng)態(tài)鏈接器會(huì)在/lib、/usr/lib和由/etc/ld.so.conf配置文件指定的,目錄中查找共享庫
環(huán)境變量
LD_LIBRARY_PATH:臨時(shí)改變某個(gè)應(yīng)用程序的共享庫查找路徑,而不會(huì)影響其他應(yīng)用程序
LD_PRELOAD:指定預(yù)先裝載的一些共享庫甚至是目標(biāo)文件
LD_DEBUG:打開動(dòng)態(tài)鏈接器的調(diào)試功能
so 共享庫的編寫
使用 CLion 編寫共享庫
創(chuàng)建一個(gè)名為 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();
// 使用可變模版參數(shù)求和
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 共享庫的使用(被可執(zhí)行項(xiàng)目調(diào)用)
使用 CLion 調(diào)用共享庫
創(chuàng)建一個(gè)名為 TestSharedLib 的可執(zhí)行項(xiàng)目
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;
}
執(zhí)行結(jié)果
World!
1 + 2 = 3
6 =
今天的分享就到這里了,大家要好好學(xué)C++喲~
-
Linux
+關(guān)注
關(guān)注
87文章
11312瀏覽量
209701 -
動(dòng)態(tài)
+關(guān)注
關(guān)注
0文章
70瀏覽量
20658 -
C++
+關(guān)注
關(guān)注
22文章
2110瀏覽量
73686
原文標(biāo)題:C++基礎(chǔ)語法梳理:鏈接裝載庫丨Linux 的共享庫
文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論