回覆列表
  • 1 # 大國師魂系列

    gcc命令要檢視目標檔案型別方法如下:一、gcc options

    -E        不生成檔案,只輸出預處理結果(輸出終端

    -S        只預處理和編譯,把檔案編譯成為彙編程式碼greet.s

    -c        預處理,編譯和彙編,生成.o的obj檔案 ( greet.o )

    -o file    輸出名為file的可執行檔名   (預設為a.out)

    -O    -O2    最佳化編譯

    -g:         產生可用於除錯的輸出

    -Wall    提示更多警告資訊

    -Wstrict-prototypes    如果函式的宣告或定義沒有指出參                           數型別,編譯器就發出警告.

    -Wl,option  將option作為選項傳遞給linker, option 逗號分割,        如:-Wl,-soname,libmymath.so.1

    二、建立函式庫

    分類:

    靜態庫: 在編譯過程中將庫函式程式碼直接加入到生成的可執行程式中,程式執行過程中不需要利用庫函式。

    動態庫: 編譯時,只是在生成的可執行程式中簡單指定需要使用的庫函式資訊,程式執行過程中需要利用庫函式。

    共享庫: 共享庫的一種變化形式,目前大都採用共享庫的方式。(好處:1、節省物理記憶體;2、庫更新後不用重新連結;3、不需要在編譯時指定庫)

    命名:

    靜態庫: 字首lib+庫名+.a (libm.a, libstdc++.a等)

    共享庫: 字首lib+庫名+.so+版本號 (libm.so.6, libc.so.6)

    三、檢視可執行目標檔案結構:size

    The size utility displays sizes of each section in an object file.

    示例:

    [root@boota]# size a.out

    text   data  bss  dec  hex  filename

    1015  232   24  1271  4f7  a.out

    四、檢視可執行檔案依賴哪些庫:ldd

    The ldd utility is very useful in finding out the dependencies of an executable on shared libraries.

    示例:

    [root@boota]# ldd a.out

    libc.so.6 => /lib/i686/libc.so.6 (0x4002c000)

    /lib/ld-linux.so.2 =>/lib/ld-linux.so.2 (0x40000000)

  • 中秋節和大豐收的關聯?
  • 林沖棒打洪教頭文言文原文?