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

【ARM 嵌入式 編譯系列 10 -- GCC 編譯縮減可執(zhí)行文件 elf 文件大小】

這篇具有很好參考價值的文章主要介紹了【ARM 嵌入式 編譯系列 10 -- GCC 編譯縮減可執(zhí)行文件 elf 文件大小】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


請閱讀【ARM GCC 編譯專欄導讀】


上篇文章:ARM 嵌入式 編譯系列 9-- GCC 編譯符號表(Symbol Table)的詳細介紹
下篇文章:ARM 嵌入式 編譯系列 10.1 – GCC 編譯縮減可執(zhí)行文件 elf 文件大小

GCC 如何縮減可執(zhí)行文件size

在開發(fā)過程總,總是希望編譯出來的可執(zhí)行文件盡量小,因為這樣可以節(jié)省更多的磁盤空間,那么有什么方法可以縮小可執(zhí)行文件的大小的

A: 通常我們會首先移除了debug信息,移除了符號表信息,同時我們還希望萬一出事了,比如coredump了,我們能獲取更多的信息。

Linux下是怎么解決這個矛盾的呢?
先看第一個問題,移除debug相關信息的影響。

測試代碼

如下實現(xiàn)了測試代碼,main 調用了 foo,foo 調用了 bar,其中bar故意訪問了非法地址,為了引起 core dump。

#include<stdio.h>
#include<stdlib.h>

static int bar(void)
{
   
    char *p = NULL;
   
    printf("I am bar,I will core dump\n");
    printf("%s",p);
    *p =0x0;
   
    return 0;
}

static int foo(void)
{
   
    int i ;
    printf("I am foo,I will call bar\n");
    bar();
    
    return 0;
}

int main(void)
{
   
    printf("I am main, I wll can foo\n");
    foo();
    
    return 0;
}

先編譯出一個 debug 版本來,然后我們看到可執(zhí)行程序的大小為 17464 bytes.

gcc -g test.c -o test
ls -rtl test
-rwxrwxr-x 1 codingcos codingcos 17464  814 09:43 test

再看下 section 信息:文章來源地址http://www.zghlxwxcb.cn/news/detail-698543.html

readelf -S test
There are 37 section headers, starting at offset 0x3af8:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         0000000000000318  00000318
       000000000000001c  0000000000000000   A       0     0     1
  [ 2] .note.gnu.pr[...] NOTE             0000000000000338  00000338
       0000000000000030  0000000000000000   A       0     0     8
  [ 3] .note.gnu.bu[...] NOTE             0000000000000368  00000368
       0000000000000024  0000000000000000   A       0     0<

到了這里,關于【ARM 嵌入式 編譯系列 10 -- GCC 編譯縮減可執(zhí)行文件 elf 文件大小】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關文章

  • 【ARM 嵌入式 編譯系列 5 -- GCC 內建函數(shù) __builtin 介紹】

    請閱讀 【ARM GCC 編譯專欄導讀】 上篇文章:ARM 嵌入式 編譯系列 4.2 – GCC 鏈接規(guī)范 extern “C“ 介紹 下篇文章:ARM 嵌入式 編譯系列 6 – GCC objcopy, objdump, readelf, nm 介紹 GCC提供了一些專門的功能,用于訪問特定的硬件指令或者實現(xiàn)特定的優(yōu)化,它們被稱為\\\" __builtin \\\"函數(shù)。 這些

    2024年02月13日
    瀏覽(96)
  • 【ARM 嵌入式 編譯系列 4.2 -- GCC 鏈接規(guī)范 extern “C“ 介紹】

    請閱讀 【ARM GCC 編譯專欄導讀】 上篇文章:ARM 嵌入式 編譯系列 4.1 – GCC 編譯屬性 likely與unlikely 學習 下篇文章:ARM 嵌入式 編譯系列 5 – GCC 內建函數(shù) __builtin 介紹 extern “C” 是一種鏈接規(guī)范,它用于告訴C++編譯器按照C語言的方式來鏈接代碼。這個主要用于在C++代碼

    2024年02月13日
    瀏覽(54)
  • 【ARM 嵌入式 編譯系列 7.3 -- GCC 鏈接腳本中 DISCARD 與 .ARM.exidx】

    【ARM 嵌入式 編譯系列 7.3 -- GCC 鏈接腳本中 DISCARD 與 .ARM.exidx】

    請閱讀 【嵌入式開發(fā)學習必備專欄 之 ARM GCC 編譯專欄】 在移植 RT-Thread 到 cortex-m33(RA4M2)上的時候,在編譯的時候遇到下面問題:

    2024年01月23日
    瀏覽(73)
  • 【ARM 嵌入式 編譯系列 2.5 -- GCC 編譯參數(shù)學習 --specs=nano.specs選項 】

    請閱讀 【嵌入式開發(fā)學習必備專欄 之 ARM GCC 編譯專欄】 ARM 工具鏈 ( arm-none-eabi- ) 包括了一個叫作 --specs 的編譯器和鏈接器選項,這個選項允許用戶指定一個或多個 “specs” 文件,以影響編譯或鏈接階段的行為。Specs 文件包含一系列的命令行參數(shù),這些參數(shù)可以是編譯器選項

    2024年01月22日
    瀏覽(28)
  • 【ARM 嵌入式 編譯系列 5 -- GCC 內建函數(shù) __builtin 詳細介紹】

    請閱讀 【ARM GCC 編譯專欄導讀】 上篇文章:ARM 嵌入式 編譯系列 4.2 – GCC 鏈接規(guī)范 extern “C“ 介紹 下篇文章:ARM 嵌入式 編譯系列 6 – GCC objcopy, objdump, readelf, nm 介紹 GCC提供了一些專門的功能,用于訪問特定的硬件指令或者實現(xiàn)特定的優(yōu)化,它們被稱為\\\" __builtin \\\"函數(shù)。 這些

    2024年02月13日
    瀏覽(116)
  • 【ARM 嵌入式 編譯系列 6 -- GCC objcopy, objdump, readelf, nm 介紹】

    請閱讀 【ARM GCC 編譯專欄導讀】 上篇文章:ARM 嵌入式 編譯系列 5 – GCC 內建函數(shù) __builtin 詳細介紹 下篇文章:ARM 嵌入式 編譯系列 7 – ARM GCC 鏈接腳本詳細講解 objcopy 是 GNU二進制工具集(binutils)的一部分,主要用于復制和轉換目標文件。 在ARM GCC中, arm-none-eabi-objcopy 通常用于

    2024年02月13日
    瀏覽(79)
  • 【ARM 嵌入式 編譯系列 2.4 -- GCC 編譯參數(shù)學習 -Wl,--gc-sections 】

    請閱讀 【嵌入式開發(fā)學習必備專欄 之 ARM GCC 編譯專欄】 在使用 GCC (GNU Compiler Collection) 進行編譯時,可以通過不同的編譯參數(shù)(標志)來控制編譯行為、優(yōu)化級別、警告輸出等。以下是您列出的一些 GCC 編譯參數(shù)的介紹: 參數(shù) 作用 –all-warnings 與-Wall 相同。 請改用后一個選

    2024年01月22日
    瀏覽(20)
  • 【ARM 嵌入式 編譯系列 4 -- GCC 編譯屬性 __read_mostly 詳細介紹】

    請閱讀 【ARM GCC 編譯專欄導讀】 上篇文章:【ARM 嵌入式 編譯系列 3.3 – gcc 動態(tài)庫與靜態(tài)庫的鏈接方法介紹】 下篇文章:【ARM 嵌入式 編譯系列 4.1 – GCC 編譯屬性 likely與unlikely 學習】 __read_mostly 是一個在Linux內核編程中用到的宏定義,這是一個gcc編譯器的屬性,用于告訴編

    2024年02月13日
    瀏覽(28)
  • 【ARM 嵌入式 編譯系列 11 -- GCC __attribute__((packed))詳細介紹】

    請閱讀 【ARM GCC 編譯專欄導讀】 上篇文章:ARM 嵌入式 編譯系列 10.3 – GNU elfutils 工具小結 下篇文章:ARM 嵌入式 編譯系列 11.1 – GCC attribute ((aligned(x)))詳細介紹 __attribute__((packed)) 是 GCC 編譯器的一個特性,它可以用于阻止編譯器為結構體或聯(lián)合體的成員進行對齊優(yōu)化,從而使

    2024年02月12日
    瀏覽(80)
  • 【ARM 嵌入式 編譯系列 3.1 -- GCC __attribute__((used)) 使用】

    請閱讀 【ARM GCC 編譯專欄導讀】 上篇文章:ARM 嵌入式 編譯系列 3 – GCC attribute ((weak)) 弱符號使用 下篇文章:ARM 嵌入式 編譯系列 3.2 – glibc 學習 在普通的 C/C++ 程序中,有的時候為了調試,我們會特別地注釋掉某個函數(shù)的調用。然而在編譯時,編譯器會發(fā)現(xiàn),代碼中實現(xiàn)了

    2024年02月12日
    瀏覽(42)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包