gcc編譯器用法

来源:https://www.cnblogs.com/ghostwu/archive/2018/01/06/8213864.html
-Advertisement-
Play Games

一個用c語言寫的程式把他編譯成電腦可執行的文件,一般有4個步驟 1,預處理:這個步驟,主要是包含頭文件,展開巨集定義 gcc -E helloworld.c -o helloworld.i 2,生成彙編代碼 gcc -S helloworld.i -o helloworld.s 3,編譯彙編 gcc ...


一個用c語言寫的程式把他編譯成電腦可執行的文件,一般有4個步驟

/*================================================================
*   Copyright (C) 2018 . All rights reserved.
*   
*   文件名稱:helloworld.c
*   創 建 者:ghostwu(吳華)
*   描    述:gcc編譯器用法演示
*
================================================================*/

#include <stdio.h>
#define HELLO "hello world!\n"

int main(int argc, char *argv[])
{
    printf( HELLO );    
    return 0;
}

1,預處理:這個步驟,主要是包含頭文件,展開巨集定義

gcc -E helloworld.c -o helloworld.i

2,生成彙編代碼

gcc -S helloworld.i -o helloworld.s

3,編譯彙編

gcc -c helloworld.s -o helloworld.o

4,鏈接

gcc helloworld.o -o helloworld

通常寫完程式,我們用 gcc helloworld.c -o helloworld 直接完成以上四個步驟

 

gcc常用選項含義:

1. -o output_filename
確定可執行文件的名稱為output_filename。如果不給出這個選項,gcc就給出預設的可執行文件名a.out。

2. -c
只編譯,不鏈接成為可執行文件,編譯器只是由輸入的.c等源文件生成.o為尾碼的目標文件。

3. -g
產生調試工具(gdb)所必要的符號信息,要想對編譯出的程式進行調試,就必須加入這個選項。

4. -ldirname
將dirname所指出的目錄加入到程式頭文件目錄列表中。

5. -Ldirname
將dirname所指出的目錄加入到庫文件的目錄列表中。

6. -Wall
生成所有警告信息。

 

gcc編譯多個模塊

helloworld.h

 1 ==============================================================
 2 *   Copyright (C) 2018 . All rights reserved.
 3 *   
 4 *   文件名稱:helloworld.h
 5 *   創 建 者:ghostwu(吳華)
 6 *   描    述:
 7 *
 8 ================================================================*/
 9 
10 #ifndef _HELLO_H_
11 #define _HELLO_H_
12 void say_hello( const char* name );
13 #endif

helloworld.c

/*================================================================
*   Copyright (C) 2018 . All rights reserved.
*   
*   文件名稱:helloworld.c
*   創 建 者:ghostwu(吳華)
*
================================================================*/

#include <stdio.h>
#include "helloworld.h"

void say_hello( const char* name ) {
    printf( "%s\n", name );
}

main.c

/*================================================================
*   Copyright (C) 2018 . All rights reserved.
*   
*   文件名稱:main.c
*   創 建 者:ghostwu(吳華)
*   描    述:
*
================================================================*/


#include "helloworld.h"

int main(int argc, char *argv[])
{
    say_hello( "hello ghostwu" );
    return 0;
}

編譯命令:

gcc helloworld.c main.c -o hello

 

打包靜態庫(就是一堆通用函數的集合,用.o文件打包):

1,首先生成.o文件

gcc -c helloworld.c -o helloworld.o

2,ar rcs libhello.a helloworld.o

r:替換  c:創建 s:保存

把helloworld打包成 libhello.a靜態庫

3,用靜態庫編譯 生成 可執行文件

gcc -Wall main.c libhello.a -o main

也可以使用l和L 選項

小寫的l: 指定庫文件名

大寫的L: 指定庫所在的路徑

gcc -Wall main.c -o main2 -lhello( 這種方式會報錯,在鏈接庫的時候,沒有用L指定路徑,預設情況下 不會在當前目錄查找靜態庫 )

gcc -Wall -L. main.c -o main2 -lhello( L後面跟個. 代表當前目錄下查找所鏈接的庫(libhello.so) ), -lhello: 省略lib和尾碼(.so)

這個時候刪除靜態庫libhello.so,生成的main和main2文件,依然能執行,因為靜態庫已經被包含在可執行文件中

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前兩天在博客園看到 .NET開發一個微信跳一跳輔助程式, 原來可以通過C#連接手機操作。正好朋友圈有人分享“沖頂大會”。沖頂大會是一個線上答題APP。每次12道題,每道題有10秒鐘的答題時間,全對者瓜分1萬或10萬獎金。於是試著答了一次,大部分題目都不算難,即便不知道但通過關鍵詞搜索應該也很容易找到 ...
  • Unity除了一些基本的數據類型,幾乎所有的API都不能在非unity線程中調用,如果項目中有一段很耗時操作,unity可能會出現“假死”。如果這段操作是和unity無關的,我們可以把這個耗時的操作放到子線程中去運行,防止unity假死提高性能,如下麵這個偽代碼 必須保證LoadLocalFile( ...
  • 每次更新、發佈新的dll到Nuget,都好煩,煩命令行的各種操作,今天就寫一個WinForm小工具來發佈自己的項目到Nuget: 由於此工具沒啥技術含量(所調用的DLL已封裝併發布到Nuget,可以在VSNuget包管理器搜索Gaofajin),故此處就不貼代碼。,代碼在附件中打包上傳! https ...
  • 最近在做mvc5的練習 ,結果到了資料庫連接這一階段就出現了問題,開始我以為<add name="MovieDBContext" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies ...
  • 假設你想在Linux Nginx中用不同的功能變數名稱訪問不同的目錄,這時就要配置多個vhost,具體配置如下,假設網站根目錄設定在/var/www/ 1、在/var/www/下新建兩個目錄 2、編輯/etc/nginx/nginx.conf 3、在/etc/nginx/conf.d下新建兩個conf文件, ...
  • 一、find命令的好處 有時會經常在目錄下找文件或目錄的具體存放在哪,但是該目錄下的文件又很多不好找出。這時並不需要手動查看所有的文件,用find命令來幫助查找就行了。所以文件或目錄一定歸好類,存放有序,這樣找起來會方便許多。如果遇到網路高峰期,儘量少用find命令,網路高峰期查找會慢許多。 二、f ...
  • 一. 系統休眠(crontab) 示例說明(創建一個 root 定時任務實現每天晚上 11 點 15 分定時關機): 示例說明(僅在周一至周五運行) 另外可以直接在/etc/crontab文件中添加定時服務 二. 喚醒(Wake-On-LAN) 1. 查看是否直接Wake-On-LAN和開啟,必須支 ...
  • 1、安裝vmware和創建虛擬機2、載入centos6.5的鏡像3、linux的介紹linux是一個操作系統(免費開源),來源unix linux是一個典型的樹形文件系統,一切都是基於文件。"/"稱之linux的根目錄即頂級目錄linux的每一個軟體都有缺點的用途,最小化安裝linux中僅有一個超級 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...