Linux 的共享庫(Shared Library)
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?配置文件指定的,目錄中查找共享庫
LD_LIBRARY_PATH:臨時改變某個應用程序的共享庫查找路徑,而不會影響其他應用程序
LD_PRELOAD:指定預先裝載的一些共享庫甚至是目標文件
LD_DEBUG:打開動態(tài)鏈接器的調(diào)試功能
使用 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
#ifndef MYSHAREDLIB_LIBRARY_H #define MYSHAREDLIB_LIBRARY_H // 打印 Hello World! void hello(); // 使用可變模版參數(shù)求和 template
library.cpp
#include
使用 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(TestSharedLib MySharedLib)
main.cpp
#include
執(zhí)行結(jié)果
Hello, World! 1 + 2 = 3 1 + 2 + 3 = 6
Linux
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。