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