在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++基礎語法知識之鏈接裝載庫中Linux 的共享庫

C語言編程學習基地 ? 來源:C語言編程學習基地 ? 作者: C語言編程 ? 2021-11-01 10:15 ? 次閱讀

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

#ifndef MYSHAREDLIB_LIBRARY_H#define MYSHAREDLIB_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...);}
#endif

library.cpp

#include #include "library.h"
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

#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;}

執行結果

Hello, World!1 + 2 = 31+2+3=6

今天的分享就到這里了,大家要好好學C++喲~

編輯:jq
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11466

    瀏覽量

    212885
  • 動態
    +關注

    關注

    0

    文章

    71

    瀏覽量

    20903
  • C++
    C++
    +關注

    關注

    22

    文章

    2117

    瀏覽量

    74818

原文標題:C++基礎語法梳理:鏈接裝載庫丨Linux 的共享庫

文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Linux動態鏈接庫的基本概念

    學習Linux動態鏈接庫是一個繞不開的話題,我們今天就一起來看一下什么是動態鏈接庫、動態鏈接庫有什么好處、如何編譯出一個動態鏈接庫等幾個關于
    發表于 09-27 14:31 ?1699次閱讀

    [分享資料]程序員的自我修養—鏈接裝載

    譯、鏈接和運行時刻所發生的各種事項,包括:代碼指令是如何保存的,文件如何與應用程序代碼靜態鏈接,應用程序如何被裝載到內存并開始運行,動態
    發表于 09-11 22:13

    Linux系統共享編程

    一、說明 類似Windows系統的動態鏈接庫Linux也有相應的共享用以支持代碼的復用
    發表于 09-13 16:49 ?24次下載

    C++動態鏈接庫的創建和調用

    動態連接的創建步驟: 一、創建Non-MFC DLL動態鏈接庫 1、打開File —> New —> Project選項,選擇Win32 Dynamic-Link Library —>sample project —>工程名:DllDemo
    發表于 11-24 18:13 ?7次下載

    Linux下靜態和動態共享)的制作與使用

    Linux下靜態和動態共享)的制作與使用Linux
    發表于 07-09 14:39 ?1264次閱讀

    c++標準手冊

    C++的標準手冊,新手學習的好資料,同時也是開發人員的必備手冊。里面涵蓋了標準C++的所有的庫函數。
    發表于 11-03 14:05 ?43次下載

    你知道linux 靜態共享

    靜態鏈接庫和動態鏈接庫的區別在于,主程序在運行前,靜態鏈接庫鏈接固定寫入在程序,而動態鏈接庫
    發表于 04-26 16:46 ?3029次閱讀

    linux共享程序剖析

    符號鏈接的原因。 共享程序是現代 UNIX? 系統中有效利用空間和資源的基礎。SUSE 系統C 程序
    發表于 04-02 14:35 ?387次閱讀

    Linux共享的構造函數和析構函數

    共享有類似C++類構造和析構函數的函數,當動態加載和卸載的時候,函數會被分別執行。一個函數加上 constructor的 attribute就成了構造函數;加上 destructo
    的頭像 發表于 06-22 09:18 ?2487次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>共享</b><b class='flag-5'>庫</b>的構造函數和析構函數

    嵌入式Linux下動態和靜態使用

    以下主要介紹Linux 下動態、靜態、如何使用已有的動態, 以及如何制作一個動態Linux
    發表于 11-01 16:57 ?1次下載
    嵌入式<b class='flag-5'>Linux</b>下動態<b class='flag-5'>庫</b>和靜態<b class='flag-5'>庫</b>使用

    C++基礎語法梳理Windows 的動態鏈接庫

    [], TCHAR *envp[]); Windows 的動態鏈接庫(Dynamic-Link Library) 部分知識點來自《Windows 核心編程(第五版)》 用處 (1)擴展了應用程序的特性 (2)簡化了項目管理 (3)有助于
    的頭像 發表于 11-02 09:21 ?2002次閱讀
    <b class='flag-5'>C++</b>基礎<b class='flag-5'>語法</b>梳理<b class='flag-5'>之</b>Windows 的動態<b class='flag-5'>鏈接庫</b>

    Linux下的靜態鏈接庫和動態鏈接庫的區別是什么?

    學習Linux動態鏈接庫是一個繞不開的話題,我們今天就一起來看一下什么是動態鏈接庫、動態鏈接庫有什么好處、如何編譯出一個動態鏈接庫等幾個關于
    的頭像 發表于 02-17 10:49 ?1707次閱讀
    <b class='flag-5'>Linux</b>下的靜態<b class='flag-5'>鏈接庫</b>和動態<b class='flag-5'>鏈接庫</b>的區別是什么?

    Linux的靜態共享

    是一個二進制文件,包含的代碼可被程序調用。例如標準C、數學、線程等等。有源碼,可下載后
    的頭像 發表于 05-10 09:34 ?1251次閱讀

    CC++編寫環境下LabVIEW如何調用動態

    C語言編寫的動態鏈接庫相比,不同的地方在于extern int “C” __declspec(dllexport) add(int x,int y) 這一導出語句,在C代碼
    發表于 06-11 09:15 ?8977次閱讀
    <b class='flag-5'>C</b>和<b class='flag-5'>C++</b>編寫環境下LabVIEW如何調用動態<b class='flag-5'>庫</b>?

    如何查看linux程序共享呢?

    linux系統,程序通常需要依賴于外部來正常工作。這些可以直接編譯到程序,也可以從共享
    的頭像 發表于 08-28 09:11 ?1911次閱讀
    如何查看<b class='flag-5'>linux</b>程序<b class='flag-5'>共享</b><b class='flag-5'>庫</b>呢?
    主站蜘蛛池模板: 精品免费久久久久久成人影院 | 天天狠天天透 | 狠狠色综合久久婷婷 | 午夜伦理片在线观看 | 色啦啦影院 | 射久久| 国产在线视欧美亚综合 | 男操女视频在线观看 | 午夜免费观看_视频在线观看 | 高清国产美女在线观看 | 亚洲日本三级 | 一级特黄aa大片免费 | 色偷偷网址| 天天干天天做天天操 | 天天色成人网 | 天天躁夜夜躁 | 四虎午夜影院 | 国产美女精品久久久久久久免费 | 国产aaa级一级毛片 国产ar高清视频+视频 | 视频在线观看免费网站 | 免费观看四虎精品国产永久 | 99成人国产精品视频 | 四虎影院永久在线 | 黑色丝袜美女被视频网站 | 亚洲欧美一区二区久久香蕉 | 成人手机看片 | 正在播放国产乱子伦视频 | 黄网站在线观看高清免费 | 亚洲伊人久久大香线蕉影院 | 亚洲欧美在线播放 | 2021日本三级理论影院 | 国产精品久久久精品三级 | 35qao强力打造免费上线高清 | 国产三级跑 | www.亚洲视频.com | 女性一级全黄生活片 | 久久天天躁狠狠躁夜夜不卡 | 欧美freesex10一|3| 国产精品免费看久久久久 | 天天夜夜人人 | 亚洲一区二区三区精品视频 |