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

Ubuntu 用gcc/CMakefile編譯器 編譯、運行c語言程序

這篇具有很好參考價值的文章主要介紹了Ubuntu 用gcc/CMakefile編譯器 編譯、運行c語言程序。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一. 在Ubuntu系統(tǒng)下用c語言編寫一個簡單的輸出hello world 的程序,并編譯、運行。

1.1 gcc/g++簡介

1.2 c++程序輸出 Hello World:

1.3?c語言程序輸出 Hello World:

二. 編寫一個主程序文件main1.c和一個子程序文件sub1.c,實現(xiàn)函數(shù)間的調(diào)用

2.1? 編寫sub1.c 和main1.c 函數(shù)

2.1.1 編寫sub1.c函數(shù)

2.1.2 編寫main1.c函數(shù),賦值a=3,b=2

2.2? ?將sub1.c程序封裝為動態(tài)庫或者靜態(tài)庫

?2.2.1? 生成靜態(tài)庫

2.2.1? 生成動態(tài)庫

2.2.3 動態(tài)庫和靜態(tài)庫的區(qū)別

三.? 在windows下系統(tǒng)下用DVC++編程實現(xiàn)

3.1 編輯主程序

3.2 編輯子程序

?3.3 運行效果

四.? 用CMakefile方式編程主程序

4.1 CMakefile 簡介

4.2 創(chuàng)建CMakeListss.txt

4.3?在CMakeLists.txt中添加添加可執(zhí)行文件,給sub1.c添加靜態(tài)庫,并添加鏈接

4.4 執(zhí)行 CMakeLists.txt,并查看是否生成上述文件

4.5?分別執(zhí)行連接動態(tài)庫和靜態(tài)庫的可執(zhí)行文件

五. 總結(jié)


一. 在Ubuntu系統(tǒng)下用c語言編寫一個簡單的輸出hello world 的程序,并編譯、運行。

1.1 gcc/g++簡介

? ? ? gcc/g++都是GUN開發(fā)的編譯器,前者用于對c語言程序的編譯,后者用于對c++程序的編譯。

其語法格式大同小異。

常用命令:

-E
    只激活預處理,這個不生成文件,你需要把它重定向到一個輸出文件里面。例子用法:   
    gcc -E hello.c > pianoapan.txt   
    gcc -E hello.c | more   
    慢慢看吧,一句`hello word`也要預處理成800行的代碼。     
-S   
    只激活預處理和編譯,就是指把文件編譯成為匯編代碼。例子用法: 
    gcc -S hello.c   
    將生成.s的匯編代碼,可以用文本編輯器查看。    
-c    
    只激活預處理,編譯,和匯編,也就是他只把程序做成obj文件。例子用法:   
    gcc -c hello.c   
    將生成.o的目標文件(object file)。 
-o
    指定目標名稱,缺省的時候,gcc/g++編譯出來的文件是a.out。例子如下:   
    g++ -o hello.out hello.cpp
    g++ -o hello.asm -S hello.cpp   

目錄選項:?

-I[dir]
    在你是用#include "file"的時候,gcc/g++會先在當前目錄查找你所指定的頭文件,如果沒有找到,會到系統(tǒng)默認的頭文件目錄找。如果使用-I指定了目錄,編譯器會先在指定的目錄查找,然后再去系統(tǒng)默認頭文件目錄查找。對于#include <file>,gcc/g++會到-I指定的目錄查找,查找不到,然后再到系統(tǒng)默認的頭文件目錄查找。
-include [file]
    相當于“#include”,用于包含某個代碼,簡單來說,就是編譯某個文件,需要另一個文件的時候,就可以   
    用它設定,功能就相當于在代碼中使用#include。例子用法:   
    gcc hello.c -include /root/pianopan.h   
-I-
    就是取消前一個參數(shù)的功能,所以一般在-Idir之后使用   
-idirafter [dir]   
    在-I的目錄里面查找失敗,將到目錄dir里面查找。
-iprefix [prefix],-iwithprefix [dir]
    一般一起使用,當-I的目錄查找失敗,會到prefix+dir下查找。
-L[dir]   
    編譯的時候,指定搜索庫的路徑。比如你自己的庫,可以用它指定目錄,不然編譯器將只在標準庫的
    目錄找。這個dir就是目錄的名稱。
-l[library]    
    指定編譯的時使用的庫,例子用法   
    gcc -lcurses hello.c   
    使用curses庫編譯連接,生成程序。 

更多命令可在ubuntu終端中輸入 man gcc 查看

1.2 c++程序輸出 Hello World:

首先創(chuàng)建一個文件????????? 格式:? nano+文件名

ubuntu 編譯器,數(shù)據(jù)庫在所創(chuàng)的文件中輸入c++代碼:

#include<iostream>
using namespace std;
int main()
{

   cout<<"Hello World!"<<endl;
   return 0;

}

ubuntu 編譯器,數(shù)據(jù)庫

退出并保存文件。

g++ a -o b?? 將a文件用c++的編譯方式編譯出名字b的可執(zhí)行文件

用g++編譯該文件

g++ Hello_World.c -o Hello_World.cpp

ls 查看是否生成可執(zhí)行文件,并運行。

ubuntu 編譯器,數(shù)據(jù)庫運行Hello_World.cpp 文件

ubuntu 編譯器,數(shù)據(jù)庫運行后輸出了? Hello World!


1.3?c語言程序輸出 Hello World:

若用c語言,需要用gcc進行編譯,語法相差不大

首先創(chuàng)建一個文本文件

ubuntu 編譯器,數(shù)據(jù)庫

在文件中輸入c語言代碼

#include  <stdio.h>
int main()
{
 printf("%s\n","Hello World!");
 return 1;
}

保存文件,并編譯文件為可執(zhí)行文件?

ubuntu 編譯器,數(shù)據(jù)庫

查看是否生成可執(zhí)行文件

ubuntu 編譯器,數(shù)據(jù)庫

運行可執(zhí)行文件

ubuntu 編譯器,數(shù)據(jù)庫

輸出Hello World!

二. 編寫一個主程序文件main1.c和一個子程序文件sub1.c,實現(xiàn)函數(shù)間的調(diào)用

要求:子程序包含算術運算函數(shù)float? x2x(int a,int b),此函數(shù)功能對輸入兩個整數(shù)作運算,結(jié)果返回浮點數(shù);主函數(shù)定義并賦值兩個整形變量,然后調(diào)用x2x函數(shù),將結(jié)果打印出來。

思路:先編寫sub1.c程序,再將封裝為庫函數(shù),在主函數(shù)中引用sub1.c的頭文件,調(diào)用其庫函數(shù)。

2.1? 編寫sub1.c 和main1.c 函數(shù)

2.1.1 編寫sub1.c函數(shù)

#include <stdio.h>
float x2x(int a,int b)
{
     float x=(float)a;
     float y=(float)b;
     return x/y;
}

2.1.2 編寫main1.c函數(shù),賦值a=3,b=2

#include "sub1.h"
void main()
{
  int a=3,b=2;
  printf("%f", x2x(3,2));
}

2.2 將sub1.c程序封裝為動態(tài)庫或者靜態(tài)庫

先將其轉(zhuǎn)為 .o 二進制文件

gcc -c sub1.c

查看是否生成sub1.o文件

ubuntu 編譯器,數(shù)據(jù)庫2.2.1? 生成靜態(tài)庫

ar -crv lib+庫名.a? +所用程序

ubuntu 編譯器,數(shù)據(jù)庫

?當前目錄下生成libsub.a靜態(tài)庫文件ubuntu 編譯器,數(shù)據(jù)庫

對主程序進行編譯,編譯需要用到剛才生成的庫

ubuntu 編譯器,數(shù)據(jù)庫

當前目錄生成了名為main1的可執(zhí)行文件,運行并查看結(jié)果:

ubuntu 編譯器,數(shù)據(jù)庫

輸出結(jié)果為1.500000

2.2.1? 生成動態(tài)庫

生成動態(tài)庫的方法跟靜態(tài)庫的方法類似

gcc? -shared -fPIC -o lib+庫名.so 所用程序ubuntu 編譯器,數(shù)據(jù)庫

當前目錄下生成libsub1.so動態(tài)庫文件

ubuntu 編譯器,數(shù)據(jù)庫

用此庫將main1.c文件編譯為可執(zhí)行文件

ubuntu 編譯器,數(shù)據(jù)庫

執(zhí)行當前目錄下生成的main_1可執(zhí)行文件

ubuntu 編譯器,數(shù)據(jù)庫

同樣輸出了結(jié)果1.500000

2.2.3 動態(tài)庫和靜態(tài)庫的區(qū)別

?????? 在Linux中,庫函數(shù)分為靜態(tài)庫和動態(tài)庫兩種。靜態(tài)庫以.a作為后綴名,共享庫以.so結(jié)尾。所有庫都是一些函數(shù)打包后的集合,差別在于靜態(tài)庫每次被調(diào)用后都會生成一個副本,而動態(tài)庫則只有一個副本,更省空間。

三.? 在windows下系統(tǒng)下用DVC++編程實現(xiàn)

3.1 編輯主程序

ubuntu 編譯器,數(shù)據(jù)庫

3.2 編輯子程序

ubuntu 編譯器,數(shù)據(jù)庫

?3.3 運行效果

ubuntu 編譯器,數(shù)據(jù)庫

四.? 用CMakefile方式編程主程序

4.1 CMakefile 簡介

? ? ? ? 理論上,任意一個c語言程序都可以用gcc來編譯。但是當程序規(guī)模越來越大時,一個工程可能有許多個文件夾和源文件,這時輸入的編譯命令就越來越長。通常,一個小型的c語言項目可能含有幾十類,各類間還存在著復雜的依賴關系。其中一部分要編譯為可執(zhí)行文件。另一部分編譯成庫文件。如果僅靠gcc命令,則需要輸入大量的編譯指令,整個編譯過程會變得異常繁瑣。因此對于c項目,使用一些工程管理工具會更加高效。在歷史上,工程師們曾使用makefile進行自動編譯,但是cmake比它更加方便。并且cmake在工程上廣泛應用??傊琧make是用來管理源代碼的工具,可以對源代碼進行編譯、生成庫等。

4.2 創(chuàng)建CMakeListss.txt

CMakeLists.txt文件用來告訴cmake要對目錄下的文件做什么事情。

ubuntu 編譯器,數(shù)據(jù)庫

第一句是要求cmake編譯器的最小版本

第二句是創(chuàng)建一個工程文件名為D

4.3?在CMakeLists.txt中添加添加可執(zhí)行文件,給sub1.c添加靜態(tài)庫,并添加鏈接

ubuntu 編譯器,數(shù)據(jù)庫

?1. 將main1.c轉(zhuǎn)為名為main2的可執(zhí)行文件

2. 將main1.c轉(zhuǎn)為名為main3的可執(zhí)行文件

3. 將sub1.c封裝為名為libsub1的靜態(tài)庫

4. 將sub1.c封裝為名為libsub2的動態(tài)庫

5. 生成的main2可執(zhí)行文件與動態(tài)庫進行連接

6. 生成的main3可執(zhí)行文件與靜態(tài)庫進行連接

4.4 執(zhí)行 CMakeLists.txt,并查看是否生成上述文件

調(diào)用cmake對該工程進行cmake編譯

ubuntu 編譯器,數(shù)據(jù)庫

cmake會輸出一些編譯信息,然后再當前目錄下生成一些中間文件,其中最重要的就是MakeFile。

由于其是自動生成的,不用修改它。現(xiàn)在用make對該工程進行編譯:

ubuntu 編譯器,數(shù)據(jù)庫

查看生成的文件

ubuntu 編譯器,數(shù)據(jù)庫

?生成了main2 main3 可執(zhí)行文件,liblibsub1.a靜態(tài)庫 以及l(fā)iblibsub2.so動態(tài)庫

4.5?分別執(zhí)行連接動態(tài)庫和靜態(tài)庫的可執(zhí)行文件

運行生成的main2 和main3文件ubuntu 編譯器,數(shù)據(jù)庫

都輸出1.500000

五. 總結(jié)

1. 在ubuntu18環(huán)境下,可以用gcc對c語言程序進行編譯和運行,用g++可以對c++語言程序進行編譯和運行。

2. ubuntu環(huán)境下用gcc編譯一個文件比較簡單,只需將程序轉(zhuǎn)為二進制可執(zhí)行文件即可,但是在運用到函數(shù)之間的調(diào)用的時候,即運用到庫時,較為復雜。

3. windows環(huán)境下對c語言的編寫和運行也是同樣的步驟,但是windows系統(tǒng)中用到的DEV C++是集成開發(fā)的軟件,比較迅速、方便。 ubuntu中也有IDE軟件,比如KDV。

4. 在執(zhí)行很多程序之間的相互調(diào)用時候,gcc生成庫較為復雜,用Makefile的方式比較簡便。

5. ubuntu中的庫分為靜態(tài)庫和動態(tài)庫,運用動態(tài)庫更加節(jié)省空間。

PS:參考資料:??g++入門教程 - 碼農(nóng)教程 (manongjc.com)

? ? ? ? ? ? ? ? ? ? ? ? ? 《視覺SLAM十四講從理論到實踐》第二版? 高翔 張濤 劉毅 顏沁睿 著文章來源地址http://www.zghlxwxcb.cn/news/detail-756832.html

到了這里,關于Ubuntu 用gcc/CMakefile編譯器 編譯、運行c語言程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關文章

  • 在 Ubuntu 18.04 x86_64 上面安裝 Linux-ARMv7 A/L GCC編譯器

    一鍵安裝??Linux-ARMv7A GCC編譯器:(平板、手機一般是) ########################### 輸入以下命令: 1、sudo apt update 2、sudo apt install gcc-arm-linux-gnueabi ? ? ?sudo apt install g++-arm-linux-gnueabi 3、arm-linux-gnueabi-gcc --version 一鍵安裝??Linux-ARMv7L GCC編譯器:(機頂盒一般是) 1、sudo apt update

    2024年02月22日
    瀏覽(25)
  • Linux:編譯器 - gcc

    Linux:編譯器 - gcc

    GCC(英文全拼:GNU Compiler Collection)是 GNU 工具鏈的主要組成部分,是一套以 GPL 和 LGPL 許可證發(fā)布的程序語言編譯器自由軟件,由 Richard Stallman 于 1985 年開始開發(fā)。 gcc是GCC中的C語言編譯器,而g++是GCC中的C++編譯器。本博客只講解gcc,g++的語法和選項和gcc都是一致的。 gcc 編譯

    2024年04月14日
    瀏覽(22)
  • Linux GCC常用命令以及GCC編譯器

    GCC 是編譯工具,它的意思是 GNU C Compiler 。經(jīng)過了這么多年的發(fā)展,GCC 已經(jīng)不僅僅能支持 C 語言;它現(xiàn)在還支持 Ada 語言、C++ 語言、Java 語言、Objective C 語言、Pascal 語言、COBOL語言,以及支持函數(shù)式編程和邏輯編程的 Mercury 語言等等。而 GCC 也不再單只是 GNU C 語言編譯器的意

    2024年02月05日
    瀏覽(33)
  • Linux——gcc/g++編譯器

    Linux——gcc/g++編譯器

    目錄 I.Linux編譯器 1.gcc/g++編譯器 在C代碼生成可執(zhí)行程序的過程中,會有四個過程: 1預處理,2編譯,3匯編,4鏈接 Linux對.c文件分辨進行預處理,編譯,匯編三大步指令: 預處理指令: 編譯指令: 匯編指令: 接下來說一說鏈接過程: II.動靜態(tài)鏈接? 一.動態(tài)鏈接 二.靜態(tài)鏈接

    2024年02月04日
    瀏覽(60)
  • Linux編譯器gcc/g++

    Linux編譯器gcc/g++

    以gcc編譯 以g++編譯,但是此時會發(fā)現(xiàn)沒有g++這個指令,所有需要安裝它,安裝指令 yum install gcc gcc-c++ gcc和g++都會形成可執(zhí)行文件a.out gcc只能編譯c語言代碼,g++能編譯c/c++ 以c程序為例,來看看它從一個文本類的c程序編譯成計算機可以認識的二進制程序它需要經(jīng)過四個階段 預

    2024年02月10日
    瀏覽(27)
  • 【Linux】編譯器-gcc/g++使用

    【Linux】編譯器-gcc/g++使用

    個人主頁 : zxctscl 文章封面來自:藝術家–賢海林 如有轉(zhuǎn)載請先通知 在之前已經(jīng)分享了 【Linux】vim的使用,這次來看看在云服務器上的編譯器gcc。 我們先寫一段簡單的代碼: 當我們進行編譯的時候: 發(fā)現(xiàn)根本就編譯不了。 這個是因為編譯器版本的問題: 查看編譯器的版

    2024年03月11日
    瀏覽(21)
  • 【Linux】03 GCC編譯器的使用

    【Linux】03 GCC編譯器的使用

    ?在使用gcc編譯程序時,編譯過程可以簡要劃分為4個階段: ? ? ? ? 預處理、編譯、匯編、鏈接 這個階段主要處理源文件中的#indef、#include和#define預處理命令; 這里主要是把一些include的頭文件和一些宏定義,放到源文件中。 編譯命令: gcc? -E? -o? hello.i? hello.c 將經(jīng)過預處

    2024年01月20日
    瀏覽(32)
  • Linux編譯器——gcc/g++使用

    Linux編譯器——gcc/g++使用

    前言: ?在上一篇,我們學習了關于文本編輯器 vim 的全部知識,今天給大家?guī)淼氖顷P于Linux編譯器—gcc/使用的詳細介紹。 本文目錄 ?(一)溫習程序的產(chǎn)生的過程 1、前言 2、程序的產(chǎn)生過程 3、??初步認識 gcc?? a)?gcc的基本概念 b)gcc的基本特點 4、使用方法?? (二)

    2023年04月17日
    瀏覽(21)
  • Linux編譯器 gcc與g++

    Linux編譯器 gcc與g++

    程序的編譯過程: 1、 預處理 (頭文件包含、消除注釋、宏定義替換) 2、 編譯 (將語言替換成匯編代碼) 3、 匯編 (將匯編指令轉(zhuǎn)換為二進制指令) 4、 鏈接 (合并段表、符號表合并及重定位) 我們可以通過gcc工具實現(xiàn)程序的編譯過程: 2.1 預處理 預處理會完成:①頭

    2023年04月18日
    瀏覽(38)
  • Linux--編譯器-gcc/g++使用

    Linux--編譯器-gcc/g++使用

    目錄 前言 1.看一段樣例 ?2.程序的翻譯過程 1.第一個階段:預處理 2.第二個階段:編譯 3.第三個階段:匯編 4.第四個階段:鏈接 3.程序的編譯為什么是這個樣子? 4. 關于編譯器 5.鏈接(動靜態(tài)鏈接) 1.首先,我們來看一段樣例(見一下) 2.見完之后,我們來看一下程序的翻譯

    2024年02月20日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包