linux c++ 編譯 庫,LINUX C/C++ 編譯庫關系

66fb6f41595788ae5629ec3eb9360852.png

在LINUX 下安裝個啥,都要涉及到編譯,尤其是開源軟件. 那么編譯就涉及到C/C++ 和對應的庫. 我們理一理之間的關系有助于MYSQL8源碼編譯

libc glibc ?libc++?libstdc++ eglibc GCC G++?CMakeGDB

從libc說起。

libc是Linux下原來的標準C庫,也就是當初寫hello world時包含的頭文件#include < stdio.h> 定義的地方。

后來逐漸被glibc取代,也就是傳說中的GNU C Library,在此之前除了有libc,還有klibc,uclibc。

現在只要知道用的最多的是glibc就行了,主流的一些linux操作系統如 Debian, Ubuntu,Redhat等用的都是glibc

那glibc都做了些什么呢?glibc是Linux系統中最底層的API,幾乎其它任何的運行庫都要依賴glibc。

glibc最主要的功能就是對系統調用的封裝,你想想看,你怎么能在C代碼中直接用fopen函數就能打開文件?

打開文件最終還是要觸發系統中的sys_open系統調用,而這中間的處理過程都是glibc來完成的。

除了封裝系統調用,glibc自身也提供了一些上層應用函數必要的功能,如string,malloc,stdlib,linuxthreads,locale,signal等等。

還有一個glib看起來也很相似,那它又是什么呢?glib也是個c程序庫,不過比較輕量級,glib將C語言中的數據類型統一封裝成自己的數據類型,提供了C語言常用的數據結構的定義以及處理函數,有趣的宏以及可移植的封裝等.

(注:glib是可移植的,說明你可以在linux下,也可以在windows下使用它)。

那它跟glibc有什么關系嗎?其實并沒有,除非你的程序代碼會用到glib庫中的數據結構或者函數,這里強調一點,在你準備更換/升級這些庫之前,你應該好好思考一下,你真的要更換/升級嗎?你要知道你自己在做什么!

你要時刻知道glibc的影響有多大,不管你之前部署的什么程序,linux系統的ls,cd,mv,ps等等全都得依賴它,很多人在更換/升級都有過慘痛的教訓,甚至讓整個系統奔潰無法啟動。所以,強烈不建議更換/升級這些庫!

當然如果你寫的是C++代碼,還有兩個庫也要非常重視了,libc++/libstdc++,這兩個庫有關系嗎?有。兩個都是C++標準庫。libc++是針對clang編譯器特別重寫的C++標準庫,那libstdc++自然就是gcc的事兒了。

再說說libstdc++,glibc的關系。libstdc++與gcc是捆綁在一起的,也就是說安裝gcc的時候會把libstdc++裝上。那為什么glibc和gcc沒有捆綁在一起呢?

相比glibc,libstdc++雖然提供了c++程序的標準庫,但它并不與內核打交道。對于系統級別的事件,libstdc++首先是會與glibc交互,才能和內核通信。相比glibc來說,libstdc++就顯得沒那么基礎了。

說完了這些庫,這些庫最終都是拿來干嘛的?當然是要將它們與你的程序鏈接在一起!這時候就不得不說說gcc了。

你寫的C代碼.c文件通過gcc首先轉化為匯編.S文件,之后匯編器as將.S文件轉化為機器代碼.o文件,生成的.o文件再與其它.o文件,或者之前提到的libc.so.6庫文件通過ld鏈接器鏈接在一塊生成可執行文件。當然,在你編譯代碼使用gcc的時候,gcc命令已經幫你把這些細節全部做好了。

那g++是做什么的? 慢慢說來,不要以為gcc只能編譯C代碼,g++只能編譯c++代碼。后綴為.c的,gcc把它當作是C程序,而g++當作是c++程序;后綴為.cpp的,兩者都會認為是c++程序,注意,雖然c++是c的超集,但是兩者對語法的要求是有區別的。在編譯階段,g++會調用gcc,對于c++代碼,兩者是等價的,但是因為gcc命令不能自動和C++程序使用的庫聯接,需要這樣,gcc -lstdc++, 所以如果你的Makefile文件并沒有手動加上libstdc++庫,一般就會提示錯誤,要求你安裝g++編譯器了。

另外eglibc是嵌入式編程的系統庫

Make工具遵循著不同的規范和標準,所執行的 Makefile 格式也千差萬別。這樣就帶來了一個嚴峻的問題:如果軟件想跨平臺,必須要保證能夠在不同平臺編譯。而如果使用上面的 Make 工具,就得為每一種標準寫一次 Makefile ,這將是一件讓人抓狂的工作。CMake就是針對上面問題所設計的工具:它首先允許開發者編寫一種平臺無關的 CMakeList.txt 文件來定制整個編譯流程,然后再根據目標用戶的平臺進一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。從而做到“Write once, run everywhere”。顯然,CMake 是一個比上述幾種 make 更高級的編譯配置工具。

在 linux 平臺下使用 CMake 生成 Makefile 并編譯的流程如下:編寫 CMake 配置文件 CMakeLists.txt 。

執行命令?cmake PATH?或者?ccmake PATH?生成 Makefile.txt

ccmake?和?cmake?的區別在于前者提供了一個交互式的界面。。其中,?PATH?是 CMakeLists.txt 所在的目錄。

使用?make?命令進行編譯。

UNIX及UNIX-like下的調試工具

一般來說,GDB主要幫助你完成下面四個方面的功能:

1、啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。

2、可讓被調試的程序在你所指定的調置的斷點處停住。(斷點可以是條件表達式)

3、當程序被停住時,可以檢查此時你的程序中所發生的事。

4、你可以改變你的程序,將一個BUG產生的影響修正從而測試其他BUG。

總結下:

我們只要記住??glibc??glib??libstdc++?GCC G++?CMakeGDB

glibc ? ? ? ?是系統C庫 不可更新

glib ? ? ? ? ?是C語言移植庫

libstdc++ 是C++語言的標準庫

GCC ? ? ? ? 是C語言編譯器

G++ ? ? ? ? 是C++語言編譯器

cmake ? ??是編譯配置工具

GDB ? ? ? ?是調試工具

LINUX C語言的多線程POSIX

C++編譯經驗小結

GCC編譯鏈接參數

LINUX LIBXXX.SO NOT FOUND

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

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

相關文章

Linux_學習_Day3_bash

Shell bash是外部程序&#xff1a;type/whichis bash。 shell&#xff0c; 子shell。可以利用bash打開另一個bash。即打開一個子shell。并且每個進程是獨立存在的。對于子shell而言&#xff0c;bash并不認知其他bash的存在。 執行了多次bash&#xff0c;要退出只需exit。用pst…

mysql 之 優化 (收集于網絡)

&#xff08;以下內容均來自于網絡&#xff0c;如果有版權限制&#xff0c;請聯系我0.0&#xff09; Mysql存儲千億級的數據&#xff0c;是一項非常大的挑戰。Mysql單表可以存儲10億級的數據&#xff0c;只是這個時候性能非常差&#xff0c;項目中大量的實驗證明&#xff0c;M…

hadoop-09-安裝資源上傳

hadoop-09-安裝資源上傳 在/software/www/html 下面上傳 ambari HDP HDP-UTILS-1.1.0.21 文件&#xff0c;之后解壓&#xff1b;

easyui 收費_收費班長喻玉華三尺崗亭獻青春

- 2020 第四期 人物訪談報道 -拼搏人生最美勵志先鋒人物專訪2013年&#xff0c;22歲的她來到巴南高速這個大家庭中&#xff0c;成為恩陽收費站一名普通的收費員。懷著對事業的執著追求與熱愛&#xff0c;經過兩年不懈的努力&#xff0c;獲得了領導和同事的認可和喜愛。2015年5月…

編程技術面試的五大要點

&#xff08;寫在前面的話&#xff1a;本文最初發表于《程序員》雜志2011年10月刊&#xff0c;并收錄到《劍指Offer——名企面試官精講典型編程題》一書中。&#xff09; 近年來找工作一直是一個很熱門的話題。我們要想找到心儀的工作&#xff0c;難免需要經過很多輪面試。編程…

訪問linux服務主機,如何把Linux配置為日志服務主機。

如網絡設備很多&#xff0c;可把同類的設備配置為相同的設備號例&#xff1a;more switch.log | grep X.X.X.X //查看某一設備的日志審核和記錄系統的事件是非常重要的。如果僅僅把系統事件作為日志記錄下來&#xff0c;而不去查看&#xff0c;還是無濟于事。可用webadmin管理和…

WSARecv() 函數使用解析

詳情參考&#xff1a;https://msdn.microsoft.com/en-us/library/windows/desktop/ms741688(vvs.85).aspx 簡述 The WSARecv function receives data from a connected socket or a bound connectionless socket. The WSARecv function provides some additional features comp…

獲取 docker 容器(container)的 ip 地址

獲取單個IP docker inspect --format {{ .NetworkSettings.IPAddress }} <container-ID> 獲取所有容器IP docker inspect -f {{.Name}} - {{.NetworkSettings.IPAddress }} $(docker ps -aq)轉載于:https://www.cnblogs.com/Tempted/p/7774789.html

山西臺達plc可編程控制器_可編程控制器2(PLC)控制原理

采用繼電器控制采用PC控制PC的控制原理(繼電器PC控制)a)當SB1按下&#xff0c;輸入繼電器00000的線圈通電&#xff0c;00000的常開觸點閉合&#xff0c;使得輸出繼電器01000的線圈得電&#xff0c;01000對應的硬輸出觸電閉合&#xff0c;KM1得電M1開始運轉&#xff0c;同時0100…

一篇讀懂 可轉債

可轉債興起的原因 可轉債是1992年底開始進入中國證券市場的&#xff0c;到現在已經27個年頭了。可以說&#xff0c;以前可轉債在中國證券市場一直不是市場的焦點和幸運兒&#xff0c;始終沒能成為一個上規模的可配置的投資品種——其原因很簡單&#xff0c;因為相對而言企業發…

bodhi linux 安裝 ubuntu軟件,Bodhi Linux 5.1.0 發布,基于Ubuntu的輕量級發行版

Bodhi Linux是基于Ubuntu的輕量級發行版&#xff0c;具有Moksha桌面環境。現在有很多Linux發行版。有些是獨特的&#xff0c;但很多是重復的&#xff0c;可能沒有存在的必要。由于使用了Moksha桌面環境&#xff0c;一個基于Linux的操作系統Bodhi脫穎而出。如果你不熟悉Bodhi&am…

談一談周公所理解的面試

因為公司最近招聘的力度很大&#xff0c;所以最近公司的面試很多&#xff0c;加之很多同事項目緊&#xff0c;所以讓我參加了一些技術面試。不論是作為面試官還是應聘者&#xff0c;參加工作以來我參與的面試的次數我自己也記不清了&#xff0c;所以在此想從面試官和應聘者的角…

idc機房運維巡檢_智和信通賦能國產信創 建設IT智能監控運維體系 - 蔚穎willing...

作為信創領域深耕多年的企業&#xff0c;北京智和信通技術有限公司始終堅持研發自主知識產權的IT智能運維監控大數據分析系統——智和網管平臺SugarNMS&#xff0c;積極探索AIOps智能運維&#xff0c;通過“國產安全監控分析安管日志運維開發”七合一模式&#xff0c;賦能IDC數…

long long or int

long long or int 很多時候long long爆空間&#xff0c;int有時又不夠 。 在算乘法的時候&#xff0c;要保證乘出來的中間項也不爆long long 轉載于:https://www.cnblogs.com/war1111/p/7532412.html

用Python的Tultle模塊創建一個五角星

方案所需準備Python官方手冊。 這里是我找到的中文版。一個可執行Python的解釋器Ttultle簡介來源烏龜圖形是一個不錯的方式來為孩子們介紹編程。它是Wally Feurzig和Seymour Papert在1966年開發的原始Logo編程語言的一部分。想象一只在x-y平面上&#xff0c;從&#xff08;0,0&…

鏡像上傳到linux失敗,Docker push鏡像失敗解決方法

Docker push鏡像失敗解決方法發布時間&#xff1a;2017-03-09 12:07來源&#xff1a;互聯網當前欄目&#xff1a;web技術類Docker push鏡像失敗的問題。以下是輸入push自己的tomcat后出現了失敗[rootslave3 ~]# docker push lekkoliu/tomcat8:latestThe push refers to a repos…

Python 之 Python2 和 Python3 的區別

1、默認編碼方式 # Python2 默認編碼方式是 ascll碼 # Python3 默認編碼方式是 utf-8 # Python2 輸出中文要加 # -*- encoding:utf-8 -*- # Python3 不需要 2、print # Python2 可以使用 print&#xff0c;也可以使用 print() 例&#xff1a; print(lili) 或 print lili # Py…

【C/C++開發】C++11 并發指南二(std::thread 詳解)

上一篇博客《C11 并發指南一(C11 多線程初探)》中只是提到了 std::thread 的基本用法&#xff0c;并給出了一個最簡單的例子&#xff0c;本文將稍微詳細地介紹 std::thread 的用法。 std::thread 在 <thread> 頭文件中聲明&#xff0c;因此使用 std::thread 時需要包含 &…

【找工作資料】外企面試技巧

這里談談面試的技巧。這是根據誠迅聯豐咨詢公司許國慶在北大光華管理學院、經濟學院和清華經濟管理學院的講座整理出來的。他曾在美國的投資銀行和商業銀行工作了近十年。 一、面試前的準備 1&#xff0e;確定3W 明確面試前的三要素&#xff0d;When (時間)、Where&#xf…

觸摸屏Sensor疊構實例學習記錄(一)

現在從事TP這個行業&#xff0c;看再多的資料和介紹&#xff0c;不如直接拿個實例的工程圖來看&#xff0c;分析每一部分具體是什么東西&#xff0c;比看再多的資料更容易入門。 以下圖紙和圖片都是我從網上隨便下的&#xff0c;僅次于學習記錄使用&#xff0c;不做另外的商業用…