国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接)

這篇具有很好參考價值的文章主要介紹了Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.gcc/g++

gcc是對c語言代碼進行編譯鏈接,而g++是對c++代碼進行編譯鏈接,接下來我們只對gcc進行講解,g++的使用方法跟gcc是一樣的。

編譯鏈接的四個步驟:

1:預處理

2:編譯

3:匯編

4:鏈接

注:這些在后面都會著重講解

1.1gcc?-o?

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

我們先在Date.c?源文件里面寫一些c語言代碼,我們知道,c語言代碼需要編譯鏈接翻譯為計算機能識別的二進制指令才能執(zhí)行。而gcc就是Linux環(huán)境下用來對c語言代碼編譯鏈接的指令.

gcc?源文件 -o?生成指定的文件名

gcc Date.c -o date.aout

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

注:這里會一步到位,直接會生成一個可執(zhí)行程序,接下來我們再一步一步分析具體細節(jié)

1.2gcc -E (預處理)(.i)

預處理:頭文件展開、去注釋、宏替換、條件編譯

-E:當程序進行翻譯時,預處理階段執(zhí)行完就停下來

gcc Date.c -o date.aout -E

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

頭文件展開:#include<stdio.h>這個文件里面有很多函數(shù)的聲明和typedef的內(nèi)容,頭文展開會將stdio.h這個文件中所有的內(nèi)容復制一份到我們的date.i文件中。

去注釋:會將我們注釋的內(nèi)容替換為空格。

1.3gcc -S (編譯)(.s)

編譯:將c語言寫的內(nèi)容翻譯為匯編語言

-S:當程序進行翻譯時,編譯階段執(zhí)行完就停下來

gcc Date.c -o date.s?-S

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

1.4gcc -c?(匯編)(.o)

匯編:將匯編語言翻譯為二進制語言。

-c:當程序進行翻譯時,編譯階段執(zhí)行完就停下來

gcc Date.c -o date.o?-c

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

1.5gcc -o (鏈接)

當我們不帶-E、-S、-c這些選項時,直接-o,gcc就會一步到位從預處理階段到編譯,再到匯編,最后到鏈接?。。?/strong>

在我們上面寫的c語言代碼中,我們并沒有寫printf函數(shù)的具體實現(xiàn),而在<stdio.h>這個文件中也只有printf函數(shù)的聲明而沒有其具體實現(xiàn)的定義,那么我們再使用printf這個函數(shù)的時候怎么去調(diào)用這個函數(shù)呢?

在Linux Centos7?環(huán)境下,系統(tǒng)把這些函數(shù)的具體實現(xiàn)都放在了一個名為libc.so.6庫文件中了,路徑為/usr/lib/libc.so.6,當我們調(diào)用printf函數(shù)時,會去libc.so.6庫文件中去尋找printf實現(xiàn)的實現(xiàn)方法,最終成功調(diào)用。

我們可以使用ldd +?可執(zhí)行程序 來查看該可執(zhí)行程序依賴了那些庫文件

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

2.動態(tài)庫/靜態(tài)庫?

2.1.再談鏈接

鏈接的時候,我們是怎么去庫文件中尋找函數(shù)具體實現(xiàn)的方法的呢?

有兩種情況,一種是我們得到函數(shù)的地址,在生成可執(zhí)行程序時根據(jù)地址去調(diào)用這個函數(shù),另一種則是我們得到這個函數(shù)的整體實現(xiàn)過程,在生成可執(zhí)行程序時將函數(shù)實現(xiàn)的代碼加載進來。

根據(jù)鏈接方式的不同,庫文件也就分成了兩種:動態(tài)庫/靜態(tài)庫,動態(tài)庫使用動態(tài)鏈接,靜態(tài)庫使用靜態(tài)鏈接。

2.2動態(tài)庫

動態(tài)庫在程序執(zhí)行時由運行時鏈接文件加載庫,通俗來說就是調(diào)用這個函數(shù)的地址,可執(zhí)行程序中并不包含此函數(shù)的具體實現(xiàn)方法,減小了可執(zhí)行程序的大小。
注:gcc在編譯時默認使用動態(tài)庫!??!
優(yōu)點:比較節(jié)省資源(磁盤、內(nèi)存、網(wǎng)絡等資源),不會出現(xiàn)太多重復代碼
缺點:太過于依賴庫,一旦庫缺失,所有使用該庫的程序都不能運行?。?!
Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

2.3靜態(tài)庫

靜態(tài)庫是指編譯鏈接時 , 把庫文件的代碼全部加入到可執(zhí)行文件中,因此生成的可執(zhí)行程序占用的空間比較大,但是運行時也就不依賴庫了。
優(yōu)點:不依賴庫,同類型平臺中可以直接運行使用。
缺點:可執(zhí)行程序占用空間比較大,比較浪費資源(磁盤、內(nèi)存、網(wǎng)絡等資源)

gcc編譯時使用-static選項可以在鏈接時使用靜態(tài)鏈接的方式鏈接靜態(tài)可。

gcc -o mybin-static test.c -static

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

但是我們直接執(zhí)行的話會出現(xiàn)問題,這里的原因是因為我們的系統(tǒng)中沒用靜態(tài)庫,導致靜態(tài)鏈接失敗。我們可以使用yum命令下載c/c++的靜態(tài)庫,在root用戶下執(zhí)行,或者使用sudo命令。如果不清楚yum命令的可以看我這一篇博客http://t.csdnimg.cn/M1JLr

sudo yum install -y glibc-static libstdc++-static

安裝好靜態(tài)庫之后?我們再進行一次編譯gcc -o mybin-static test.c -static

Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接),linux,運維,服務器

由圖可知,靜態(tài)鏈接靜態(tài)庫生成的可執(zhí)行程序比動態(tài)鏈接動態(tài)庫生成的可執(zhí)行程序要大得多文章來源地址http://www.zghlxwxcb.cn/news/detail-752740.html

到了這里,關于Linux下Centos7 gcc/g++、動態(tài)庫/靜態(tài)庫(動態(tài)/靜態(tài)鏈接)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Linux下gcc編譯,動態(tài)庫和靜態(tài)庫,makefile,gdb調(diào)試

    Linux下gcc編譯,動態(tài)庫和靜態(tài)庫,makefile,gdb調(diào)試

    展開頭文件, 宏替換(變量宏、函數(shù)宏)、替換空格等 逐行檢查程序中出現(xiàn)的語法錯誤,簡單的邏輯錯誤 將 .s 匯編文件中所有的匯編指令翻譯成二進制機器碼(下面就是來了個截圖,二進制顯示了亂碼) 將 .o 的目標文件,鏈接庫文件、數(shù)據(jù)段合并,地址回填(把匯編里相

    2024年02月08日
    瀏覽(52)
  • linux下g++鏈接動態(tài)庫和靜態(tài)庫

    頭文件的作用: include的作用就是復制內(nèi)容到當前文件 井號開頭的就是預處理指令,由預處理器處理,預處理階段不關心代碼,只處理預處理指令。 頭文件主要 一是為了解決代碼都寫在一個文件太大了,二是把變量,結(jié)構(gòu)體,函數(shù)聲明這些固定的放在一起 函數(shù)只要聲明了,

    2024年02月09日
    瀏覽(21)
  • 【看表情包學Linux】軟硬鏈接 | 軟連接數(shù) | 創(chuàng)建軟硬鏈接 | 動靜態(tài)庫 | 生成靜態(tài)庫 | 生成動態(tài)庫

    【看表情包學Linux】軟硬鏈接 | 軟連接數(shù) | 創(chuàng)建軟硬鏈接 | 動靜態(tài)庫 | 生成靜態(tài)庫 | 生成動態(tài)庫

    ?? ??? 爆笑 教程 ????《看表情包學Linux》?? ? 猛戳訂閱 ? ? ?? ?? 寫在前面: 上一章我們講解了 inode,為文件系統(tǒng)收了尾,這幾章我們充分地講解完了文件系統(tǒng)的知識點,現(xiàn)在我們開始開始學習軟硬鏈接了。如果沒有文件系統(tǒng)的鋪墊,想直接理解軟硬鏈接難免有些困

    2024年02月14日
    瀏覽(40)
  • 【Linux系統(tǒng)編程】Linux下的編譯器——gcc/g++的使用 及 動態(tài)庫和靜態(tài)庫的認識

    【Linux系統(tǒng)編程】Linux下的編譯器——gcc/g++的使用 及 動態(tài)庫和靜態(tài)庫的認識

    這篇文章我們繼續(xù)學習Linux中的開發(fā)工具,今天要學的是: Linux下的編譯器——gcc/g++ 我們先來簡單了解一下它們的概念: gcc (GNU Compiler Collection) 和 g++ 是 Linux 系統(tǒng)上最常用的編譯器。它們是 GNU 組織開發(fā)的一套開源編譯器工具集。 gcc: gcc 是 GNU 編譯器集合中的 C 語言編譯器。

    2024年02月16日
    瀏覽(24)
  • Linux CentOS7虛擬機配置靜態(tài)IP并允許上網(wǎng)的配置方法

    Linux CentOS7虛擬機配置靜態(tài)IP并允許上網(wǎng)的配置方法

    2023博客之星評選已開啟--成為城市領跑者 當我們成功的將CentOS鏡像安裝到了我們的虛擬機上后,可是這個時候,虛擬機還沒有配置IP信息,為了后面開發(fā) 方便,我們需要設置一個靜態(tài)IP。 本地電腦,右鍵點擊網(wǎng)絡-選擇\\\"更改適配器選項\\\" - 啟用VMnet8。 打開Vmware虛擬機,本文以

    2024年02月07日
    瀏覽(25)
  • 【linux深入剖析】動態(tài)庫的使用(續(xù)) | 動靜態(tài)庫的鏈接

    【linux深入剖析】動態(tài)庫的使用(續(xù)) | 動靜態(tài)庫的鏈接

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫等等一系列知識 ??感謝你的陪伴與支持 ,故事既有了開頭,就要畫上一個完美的句號,讓我們一起加油 回顧上節(jié),我們在創(chuàng)建了動態(tài)庫libmymath.so 我們使用指令 gcc main.c -L. -lmymath -L . (-L + 路徑表示myc這個庫在哪

    2024年04月15日
    瀏覽(21)
  • 【探索Linux】—— 強大的命令行工具 P.13(文件系統(tǒng) | 軟硬鏈接 | 動態(tài)庫和靜態(tài)庫)

    【探索Linux】—— 強大的命令行工具 P.13(文件系統(tǒng) | 軟硬鏈接 | 動態(tài)庫和靜態(tài)庫)

    在計算機科學領域中,Linux 系統(tǒng)一直以來都是備受推崇的操作系統(tǒng)之一。其中,文件系統(tǒng)、軟硬鏈接、動態(tài)庫和靜態(tài)庫是 Linux 系統(tǒng)中非常重要的概念,在實際應用中扮演著不可或缺的角色。 在上一篇文章中,我們了解了 Linux 系統(tǒng)中文件描述符、重定向以及基礎 IO 操作的相關

    2024年02月04日
    瀏覽(21)
  • VMware虛擬機+Centos7 配置靜態(tài),動態(tài)IP

    VMware虛擬機+Centos7 配置靜態(tài),動態(tài)IP

    ls 修改BOOTPROTO=static i編輯 esc關閉 :wq保存 如圖: 添加以下內(nèi)容:IP地址、子網(wǎng)掩碼、網(wǎng)關、dns服務器 ping 虛擬機地址192.168.74:100

    2024年02月09日
    瀏覽(26)
  • 【Linux-編譯器gcc/glibc升級】CentOS7.9使用NodeJS18時報錯/lib64/libm.so.6: version `GLIBC_2.27‘ not found

    文章已收錄至https://lichong.work,轉(zhuǎn)載請注明原文鏈接。 ps:歡迎關注公眾號“Fun肆編程”或添加我的私人微信交流經(jīng)驗?? 最近做一個前端項目Jenkins的自動構(gòu)建時,項目使用nodejs18,正好公司Jenkins節(jié)點有些不夠用,就用了臺資源空余比較多的服務器用于充當Jenkins節(jié)點,配置好

    2024年02月16日
    瀏覽(24)
  • CentOS7 將動態(tài)分配IP改為靜態(tài)IP的兩種方法

    本文整理了CentOS7的將動態(tài)分配IP改為靜態(tài)IP的兩種方法。第一種方法是修改網(wǎng)卡對應的配置文件,然后重啟network。第二種則是借助nmcli命令進行修改。 注:本文內(nèi)容基于虛擬機上運行的CentOS7環(huán)境,實體機安裝的CentOS7在網(wǎng)卡名稱方面可能會有出入。 使用虛擬機的話,網(wǎng)卡的名

    2024年02月15日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包