『壹』 gcc 的編譯選項 -MD 是什麼意思
MD 是一個參數.
gcc提供了大量的警告選項,對代碼中可能存在的問題提出警 告,通常可以使用-Wall來開啟以下警告:
-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat
-Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration
-Wcomment -Wformat -Wmain (only for C/ObjC and unless
-ffreestanding) -Wmissing-braces -Wnonnull -Wparentheses
-Wpointer-sign -Wreorder -Wreturn-type -Wsequence-point
-Wsign-compare (only in C++) -Wstrict-aliasing -Wstrict-overflow=1
-Wswitch -Wtrigraphs -Wuninitialized (only with -O1 and above)
-Wunknown-pragmas -Wunused-function -Wunused-label -Wunused-value
-Wunused-variable
unused-function:警告聲明但是沒有定義的static函數;
unused- label:聲明但是未使用的標簽;
unused-parameter:警告未使用的函數參數;
unused-variable:聲明但 是未使用的本地變數;
unused-value:計算了但是未使用的值;
format:printf和scanf這樣的函數中的格式字元 串的使用不當;
implicit-int:未指定類型;
implicit-function:函數在聲明前使用;
char- subscripts:使用char類作為數組下標(因為char可能是有符號數);
missingbraces:大括弧不匹配;
parentheses: 圓括弧不匹配;
return-type:函數有無返回值以及返回值類型不匹配;
sequence-point:違反順序點的代碼,比如 a[i] = c[i++];
switch:switch語句缺少default或者switch使用枚舉變數為索引時缺少某個變數的case;
strict- aliasing=n:使用n設置對指針變數指向的對象類型產生警告的限製程度,默認n=3;只有在-fstrict-aliasing設置的情況下有 效;
unknow-pragmas:使用未知的#pragma指令;
uninitialized:使用的變數為初始化,只在-O2時有 效;
『貳』 gcc g++ 使用哪些編譯選項可以讓編譯出來的程序兼容32位和64位
用32位的gcc,編譯出來後,能在32位上運行,也能在64位上兼容。
『叄』 求助:GCC編譯選項加上
Debug選項:
在 gcc編譯源代碼時指定-g選項可以產生帶有調試信息的目標代碼,gcc可以為多個不同平台上帝不同調試器提供調試信息,默認gcc產生的調試信息是為 gdb使用的,可以使用-gformat 指定要生成的調試信息的格式以提供給其他平台的其他調試器使用.常用的格式有
-ggdb:生成gdb專 用的調試信息,使用最適合的格式(DWARF 2,stabs等)會有一些gdb專用的擴展,可能造成其他調試器無法運行.
-gstabs:使用 stabs格式,不包含gdb擴展,stabs常用於BSD系統的DBX調試器.
-gcoff:產生COFF格式的調試信息,常用於System V下的SDB調試器;
-gxcoff:產生XCOFF格式的調試信息,用於IBM的RS/6000下的DBX調試器;
-gdwarf- 2:產生DWARF version2 的格式的調試信息,常用於IRIXX6上的DBX調試器.GCC會使用DWARF version3的一些特性.
可 以指定調試信息的等級:在指定的調試格式後面加上等級:
如: -ggdb2 等,0代表不產生調試信息.在使用-gdwarf-2時因為最早的格式為-gdwarf2會造成混亂,所以要額外使用一個-glevel來指定調試信息的 等級,其他格式選項也可以另外指定等級.
gcc可以使用-p選項指定生成信息以供porf使用.
『肆』 gcc 編譯選項 -pthread -lpthread 異同
-pthread 比 -lpthread 多了一個宏定義 -D_REENTRANT
對於多線程程序來說這個宏非常重要,這個宏會讓libc和一些其他庫,自動選擇線程安全的函數實現(很多函數有線程安全和不安全的2種實現版本)
所以建議使用-pthread 或者加上 -D_REENTRANT.
『伍』 gcc編譯選項 -w是什麼意思
不同版本的動態庫是為了升級方便,舊的程序需要與舊的庫鏈接,新的程序與新的.
一般的做法是把libabc.so連接(symbolic link, ln -s libabc.so.N libabc.so)到最新的版本,這樣以後的新程序,在用gcc -labc的時候,都會鏈接到新的版本.舊的已經鏈接好的程序並不會產生不兼容的問題,因為舊程序在過去已經鏈接過了(動態庫鏈接的信息可以用ldd來查看: ldd /bin/ls).
symbolic link, ln是推薦的維護版本的辦法,不建議更改文件名.
如果你要有一個方便的辦法鏈接舊的版本, 建一個舊的版本的symbolic link就可以了,libabc11.so
ln -s libabc.so.11 libabc11.so
gcc -labc11...
以上回答你滿意么?
『陸』 linux 下,編譯時啟用-g選項,會不會影響運行速度。發布版本時,要不要啟用-g選項
加上-g後肯定會影響運行效率的,而且包含代碼的很多信息,一來為了提高效率,二是防止被別人很容易的反編譯,發布時使用strip去除debug信息。
『柒』 (arm, linux): gcc的編譯選項「-MT $(*F).o -MF dep/$(@F).d」是什麼意思
你這是makefile裡面截出來的吧。。。。。。你問的那些不是gcc的命令,是make的自動變數。。。。。。。。。。。。。。。。。
$(*F)是目標的文件名。比如你的目標是src/foo.c,那$(*F)就是foo
$@代表make中的目標文件集合(所有目標文件),$(@F)是指這個目標文件集合裡面所有的不包含路徑的文件名。比如你的$@是src/foo.o,那$(@F)就是foo.o
『捌』 gcc為什麼要加-g選項不加的話也可以編譯運行c程序啊
加選項-g是為了能夠調試。不加可以運行,但不能調試
『玖』 求gcc編譯與鏈接選項參數介紹的資料
gcc --help
不用資料,在命令行里有不懂的參數或者用法可以像上面那樣,[program name] --help
再詳細就翻閱GNU的手冊或者官網資料。