在线观看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

    文章

    11345

    瀏覽量

    210414
  • 動態
    +關注

    關注

    0

    文章

    70

    瀏覽量

    20704
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73859

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

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

收藏 人收藏

    評論

    相關推薦

    Linux動態鏈接庫的基本概念

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

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

    譯、鏈接和運行時刻所發生的各種事項,包括:代碼指令是如何保存的,文件如何與應用程序代碼靜態鏈接,應用程序如何被裝載到內存并開始運行,動態
    發表于 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 ?1194次閱讀

    c++標準手冊

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

    你知道linux 靜態共享

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

    linux共享程序剖析

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

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

    共享有類似C++類構造和析構函數的函數,當動態加載和卸載的時候,函數會被分別執行。一個函數加上 constructor的 attribute就成了構造函數;加上 destructo
    的頭像 發表于 06-22 09:18 ?2356次閱讀
    <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 ?1825次閱讀
    <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 ?1368次閱讀
    <b class='flag-5'>Linux</b>下的靜態<b class='flag-5'>鏈接庫</b>和動態<b class='flag-5'>鏈接庫</b>的區別是什么?

    Linux的靜態共享

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

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

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

    如何查看linux程序共享呢?

    linux系統,程序通常需要依賴于外部來正常工作。這些可以直接編譯到程序,也可以從共享
    的頭像 發表于 08-28 09:11 ?1659次閱讀
    如何查看<b class='flag-5'>linux</b>程序<b class='flag-5'>共享</b><b class='flag-5'>庫</b>呢?
    主站蜘蛛池模板: 欧美h网| 久久精品影视 | 亚洲一级毛片在线观播放 | 全部免费特黄特色大片农村 | 日本免费精品视频 | 人人揉揉香蕉大青草 | 国模在线 | 天天爱天天做天天爽天天躁 | 一区二区亚洲视频 | 成人在线观看网站 | 日本黄色免费大片 | 成人a毛片在线看免费全部播放 | 午夜精品久久久久久 | 午夜色网站 | 国产精品超清大白屁股 | 亚洲卡1卡2卡新区网站 | 国产中文字幕一区 | 色综合亚洲天天综合网站 | 亚洲一区二区三区中文字幕 | 久草视频资源在线 | 成人精品亚洲人成在线 | 天天看a | 丁香六月欧美 | 丁香花在线影院观看在线播放 | 日韩三级免费观看 | 热久久最新视频 | 欧美三级第一页 | 国产午夜精品理论片在线 | 黄色的网站在线观看 | 免费精品99久久国产综合精品 | 黄色短视频免费观看 | 天天摸天天碰成人免费视频 | 手机在线观看国产精选免费 | 一级片免费视频 | 人人爱天天做夜夜爽 | 成人性欧美丨区二区三区 | 男男np主受高h啪啪肉 | 劳拉淫欲护士bd字幕 | 簧片免费视频 | 日本网站免费观看 | 黄色一区二区三区 |