Linux下C++靜態鏈接庫的生成以及使用

目錄

  • 一.前言
  • 二.生成靜態鏈接庫
  • 三.使用靜態鏈接庫


一.前言

這篇文章簡單討論一下Linux下如何使用gcc/g++生成和使用C++靜態鏈接庫(.a文件)。

二.生成靜態鏈接庫

先看下目錄結構

在這里插入圖片描述

然后看下代碼

//demo.h#ifndef DEMO_H
#define DEMO_H#include<string>class Demo
{
public:Demo(void) = default;~Demo(void) noexcept = default;void Print(const std::string& msg);
};#endif // !DEMO_H
//demo.cpp#include"demo.h"#include<iostream>void Demo::Print(const std::string& msg)
{std::cout << "msg:" << msg << std::endl;
}

很簡單的代碼,就是提供一個打印字符串的接口。

然后我們使用demo.h和demo.cpp來生成靜態鏈接庫。

先執行命令g++ -c demo.cpp -o demo.o生成demo.o,然后執行命令ar -cr libdemo.a demo.o生成靜態鏈接庫libdemo.a,注意靜態鏈接庫必須要包含lib前綴,另外我們知道Linux下靜態鏈接庫的后綴是.a。

在這里插入圖片描述

我們可以看到已經生成了靜態鏈接庫libdemo.a。

三.使用靜態鏈接庫

我們看一下怎么使用靜態鏈接庫,新建main.cpp來使用靜態鏈接庫。

先看下目錄結構

在這里插入圖片描述

然后看下代碼

//main.cpp#include<string>#include"demo.h"int main(int argc, char* argv[])
{Demo demo;std::string strMsg("main msg");demo.Print(strMsg);return 0;
}

其實就是很簡單的代碼。

然后執行命令g++ -o main main.cpp -L. -ldemo使用main.cpp和libdemo.a生成可執行文件main。其中-L.指定要鏈接的庫所在位置是當前目錄,-ldemo指定要鏈接的庫是libdemo.a。

在這里插入圖片描述

我們可以看到已經生成了可執行文件main,并且可以正常執行,而且這個時候如果刪除了靜態鏈接庫libdemo.a,main還是可以正常執行,這是靜態鏈接庫的特性,也就是所謂的靜態鏈接。


歡迎討論,歡迎指正,歡迎轉載。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209487.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209487.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

線程狀態:深入理解多任務并發編程中的精髓

目錄 引言 1. 線程狀態概述 1.1 定義 1.2 線程狀態圖 2. 線程狀態的轉換 2.1 新建到就緒 2.2 就緒到運行 2.3 運行到阻塞 2.4 運行到等待和超時等待 2.5 運行到終止 3. 實際編程中的線程狀態管理 3.1 合理使用wait()和notify() 3.2 謹慎處理阻塞狀態 3.3 使用線程…

面試題之Docker篇

1、Docker 是什么&#xff1f; Docker一個開源的應用容器引擎&#xff0c;是實現容器技術的一種工具&#xff0c;讓開發者可以打包他們的應用以及環境到一個鏡像中&#xff0c;可以快速的發布到任何流行的操作系統上。 2、Docker的三大核心是什么? 鏡像&#xff1a;Docker的鏡…

Elastic Support Hub 轉向語義搜索

作者&#xff1a;Chris Blaisure 我們很高興與大家分享 Elastic Support Hub 最近的增強功能&#xff1a;它現在由語義搜索提供支持&#xff01; 但在我們更詳細地了解對 Elastic Support Hub 所做的更改及其對客戶的影響之前&#xff0c;我們需要花點時間解釋語義搜索的概念&…

el-form表單校驗值為0提示校驗不通過

el-form表單校驗輸入框值為0時提示校驗不通過 配置validator自定義校驗方法 這里舉例在結構代碼里加入校驗規則 <el-form-item:prop"num":rules"[{required: true,message: 請輸入數量,trigger: change,},{validator,trigger: blur}]" ><el-inpu…

【安卓】安卓xTS之Media模塊 學習筆記(3) VTS測試

1. 背景 接下來進行正式的VTS測試。本章節還是以Media模塊相關進行介紹。 VTS主要測的是內核和HAL層&#xff0c;media的hal層是以openMax&#xff08;即將廢棄&#xff0c;今日2023.12&#xff09; 和 Codec2 (后續主流) 接口為主。 這里我們只看Codec2的要求&#xff0c;CDD…

統計字符

輸入一行字符&#xff0c;分別統計出包含英文字母、空格、數字和其它字符的個數。 數據范圍&#xff1a;輸入的字符串長度滿足1≤n≤1000 輸入描述&#xff1a;輸入一行字符串&#xff0c;可以有空格 輸出描述&#xff1a;統計其中英文字符&#xff0c;空格字符&#xff0c;數…

MongoDB的插入文檔、更新文檔語句

本文主要介紹MongoDB的插入文檔、更新文檔語句。 目錄 MongoDB插入文檔MongoDB更新文檔 MongoDB插入文檔 在MongoDB中&#xff0c;可以通過使用insertOne或insertMany方法向集合中插入文檔。 insertOne方法可以插入一個文檔&#xff0c;例如&#xff1a; db.collection.inse…

Android 等待view 加載布局完成 (包括動態生成View)

前言 在實際開發中&#xff0c;有很多組件需要 根據數據&#xff0c;動態生成&#xff0c;或者 追加 / 減少 子view&#xff0c;由于View布局需要時間&#xff0c;此時想要獲取父View的最新寬高值&#xff0c;要么手動測量&#xff0c;要么等待布局完成后再獲取&#xff1b; …

“天作之合”softmax與CrossEntropy

本文從 max \text{max} max到 logsumexp ? \operatorname{logsumexp} logsumexp&#xff0c;再到 softmax \text{softmax} softmax進行了一個簡單推導&#xff0c;最后說明了 softmax \text{softmax} softmax與CrossEntropy的關系。希望幫助大家理解多分類損失函數CrossEntrop…

樹莓派學習:學習opencv+用opencv獲取樹莓派mjpg攝像頭視頻流

目錄 前提步驟 打開樹莓派攝像頭 查看是否有圖像&#xff0c;登錄游覽器打開樹莓派IP地址的8080端口 獲取mjpg的視頻流url 代碼 先設定好mjpg的視頻流的url 利用opencv庫中的v2.VideoCapture類讀取mjpg視頻流 cv2.VideoCapture() 檢查攝像頭是否成功打開&#xff0c;…

scikit-learn實現線性回歸

要學習scikit-learn,我們必須要到scikit-clearn的官網中去查看公式和原理 scikit-learn 官網 scikit-learn 中文社區 進入官網一以后我們找到回歸&#xff0c;然后再有監督學習中找到線性模型 scikit-learn實現簡單的線性回歸 公式&#xff1a; L2范數是指向量中每個元素的平…

Java+Swing: 主界面的窗體 整理8

主界面的寫法跟之前登錄界面的窗體寫法大致相同&#xff0c;在主界面中主要是窗體的大小的設置 package com.student_view;import com.utils.DimensionUtil; import sun.applet.Main;import javax.swing.*; import java.awt.*; import java.net.URL;/*** Author&#xff1a;xie…

C# --線程的進化史

1.C# 線程的進化史可以追溯到 .NET Framework 的早期版本和 C# 語言的發展過程 Thread 類&#xff08;.NET Framework 1.0&#xff09;&#xff1a;最初&#xff0c;C# 中使用 Thread 類來創建和管理線程。通過實例化 Thread 類并調用其 Start 方法&#xff0c;可以在應用程序…

全面覆蓋,無所不包:C++ 編程必備指南 | 開源日報 No.99

fffaraz/awesome-cpp Stars: 51.0k License: MIT 這個項目是一個精心策劃的 C(或者 C) 框架、庫、資源和其他有趣東西的列表。它收集了各種標準庫&#xff0c;如 STL 容器和算法&#xff1b;不同領域的框架&#xff0c;比如人工智能、異步事件循環等&#xff1b;以及一系列功…

【人工智能Ⅰ】實驗7:K-means聚類實驗

實驗7 K-means聚類實驗 一、實驗目的 學習K-means算法基本原理&#xff0c;實現Iris數據聚類。 二、實驗內容 應用K-means算法對iris數據集進行聚類。 三、實驗結果及分析 0&#xff1a;輸出數據集的基本信息 參考代碼在main函數中首先打印了數據、特征名字、目標值、目標…

【上海大學數字邏輯實驗報告】四、組合電路(三)

一、 實驗目的 掌握多路選擇器74LS151的原理。掌握譯碼器74LS138的原理。學會在Quartus II上使用多路選擇74LS151設計電路。學會在Quartus II上使用譯碼器74LS138設計電路。 二、 實驗原理 多路選擇器又稱數據選擇器或多路開關&#xff0c;它是一種多路輸入單路輸出的組合邏…

HHDESK右鍵管理簡介

在HHDESK管理文件&#xff0c;除了基本的打開、刪除、復制、粘貼、重命名外&#xff0c;還有多種便捷編輯方式。 可以分別以下列模式打開文檔&#xff1a; 文本模式即是以文本編輯器打開文檔。 1 二進制模式 可進行二進制編輯。 2 JSON模式 可對JSON文件進行直觀的解析…

機器學習中的特征工程

1 特征工程概述 特征工程是機器學習中的一個關鍵步驟&#xff0c;在機器學習領域中占有非常重要的地位&#xff0c;是機器學習中不可或缺的一部分&#xff0c;下圖展示了一個常規的機器學習流程&#xff1a; 特征工程涉及從原始數據中提取、選擇和轉換特征&#xff0c;以改善模…

Lombok 處理異常@SneakyThrows 注解

文章目錄 注解的介紹具體示例 注解的介紹 SneakyThrows 是 Lombok 框架提供的一個注解&#xff0c;它可以用于在方法中拋出受檢異常時&#xff0c;不用顯式地對異常進行處理&#xff0c;而是將異常包裝成 RuntimeException 拋出 使用 SneakyThrows 注解后&#xff0c;編譯器會…

“輕松管理文件,一鍵導出表格,讓您的歸檔工作井井有條“

在忙碌的工作中&#xff0c;我們經常會被大量的文件和數據所困擾。如何有效地管理和整理這些資料&#xff0c;成為了一個讓人頭疼的問題。今天&#xff0c;我們向您介紹一款強大的文件管理工具——一鍵導出表格&#xff0c;幫助您輕松解決這個問題。 第一步&#xff0c;首先我們…