Linux 的共享庫(Shared Library)

      網(wǎng)友投稿 1644 2025-04-03

      linux 的共享庫(Shared Library)


      linux 下的共享庫就是普通的 ELF 共享對象。

      Linux 的共享庫(Shared Library)

      共享庫版本更新應該保證二進制接口 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 T sum(T t) { return t; } template T sum(T first, Types ... rest) { return first + sum(rest...); } #endif

      library.cpp

      #include #include "library.h" void hello() { std::cout << "Hello, World!" << std::endl; }

      使用 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 #include "library.h" 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é)果

      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)容。

      上一篇:excel表頭斜線設置(怎樣設置斜線表頭Excel)
      下一篇:如何把表格量序按日期排列(怎樣讓表格日期排序
      相關文章
      亚洲熟妇丰满xxxxx| 亚洲精品国产精品乱码在线观看 | 亚洲国产精品国产自在在线| 亚洲成年网站在线观看| 亚洲国产综合第一精品小说| 久久综合亚洲鲁鲁五月天| 亚洲爱情岛论坛永久| 亚洲第一AAAAA片| 亚洲成AV人片在线观看无码| 国产亚洲精品a在线观看app| 亚洲精品乱码久久久久久久久久久久 | a级亚洲片精品久久久久久久| 亚洲AV网站在线观看| 亚洲av午夜电影在线观看| 亚洲va中文字幕| 日韩亚洲翔田千里在线| 久久久久久亚洲av无码蜜芽| 亚洲av成人一区二区三区观看在线 | 亚洲综合色婷婷七月丁香| 亚洲乱码中文字幕综合234| 亚洲国产精品尤物yw在线| 国产亚洲综合精品一区二区三区| 亚洲Av永久无码精品一区二区| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲av综合av一区二区三区| 久久亚洲中文字幕无码| 偷自拍亚洲视频在线观看| 亚洲精品无码你懂的网站| 国产亚洲成人久久| 国产亚洲精品自在久久| 亚洲免费视频在线观看| 亚洲欧洲校园自拍都市| 亚洲第一区二区快射影院| 亚洲另类自拍丝袜第五页| 女bbbbxxxx另类亚洲| 久久久久一级精品亚洲国产成人综合AV区 | 亚洲制服丝袜一区二区三区| 亚洲综合国产成人丁香五月激情| 亚洲大码熟女在线观看| 亚洲国产精品无码久久青草| 国产亚洲一区二区精品|