ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>久热99视频在线观看,香蕉97视频观看在线观看,亚洲欧美一区二区三区国产精品
http://www.aygfsteel.com/ivanwan/category/2558.html自由的力é‡ï¼Œè‡ªç”±çš„生‹z…R€?/description>zh-cn Wed, 28 Feb 2007 03:40:18 GMT Wed, 28 Feb 2007 03:40:18 GMT 60 如何在cygwin用gcc¾~–译 http://www.aygfsteel.com/ivanwan/archive/2006/02/17/31302.htmlivaneeo ivaneeo Fri, 17 Feb 2006 14:00:00 GMT http://www.aygfsteel.com/ivanwan/archive/2006/02/17/31302.html http://www.aygfsteel.com/ivanwan/comments/31302.html http://www.aygfsteel.com/ivanwan/archive/2006/02/17/31302.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/31302.html http://www.aygfsteel.com/ivanwan/services/trackbacks/31302.html åŠ å…¥˜q™ä¸ªé€‰é¡¹å…¶å®žgcc¾~–译器就会自动的选择在安装cygwin/gcc时安上的mingw,˜q™ä¸ªmingwž®±æ˜¯gcc的一个交å‰ç¼–译ã€?br> 如果è¦ç¨‹åºæ²¡æœ‰æŽ§åˆ¶å°çš„è¯,åªåŠ ä¸Šå‚æ•?mwindowsž®±å¯ä»¥äº†. ]]> gccè¦å‘Šå’Œå‡ºé”™æ¶ˆé€‰é¡¹ http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9338.htmlivaneeo ivaneeo Thu, 04 Aug 2005 14:03:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9338.html http://www.aygfsteel.com/ivanwan/comments/9338.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9338.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9338.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9338.html
/*
* pedant.c - use -ansi, -pedantic or
-pedantic-errors
*/
#include <stdio.h>
void
main(void)
{
long long int i = 0l;
printf("This is a non-conforming
c program\n");
}
使用gcc pedant.c -o
pedant˜q™ä¸ªå‘½ä×oæ—?¾~–译器会è¦å‘Šmainå‡½æ•°çš„è¿”å›žç±»åž‹æ— æ•?
$gcc pedant.c -o pedant
pedant.c:In
function 'main':
pedant.c:7 warning:return type of 'main' is not
'int'
现在¾l™gccåŠ ä¸Š-ansi选项:
$gcc -ansi pedant.c -o pedant
$gcc pedant.c -o
pedant
pedant.c: In function 'main'
pedant.c:7 warning: return type of
'main' is not
'int'
gcc冿¬¡¾l™å‡ºäº†åŒæ ïLš„è¦å‘Šä¿¡æ¯,òq¶å¿½ç•¥äº†æ— 效的数æ®ç±»åž?
-ansi,-pedantic以åŠ-pedantic-errors¾~–译选项òq¶ä¸èƒ½ä¿è¯è¢«¾~–译的程åºçš„ANSI/ISO兼容æ€?它们仅被用æ¥å¸®åŠ©½E‹åºå‘˜ç¦»˜q™ä¸ªç›®æ ‡æ›´è¿‘.
$gcc
-Wall pedant.c -o pedant
pedant.c:7: warning: return type of 'main' is not
'int'
pedant.c: In function 'main':
pedant.c:8 warning: unused variable
'i'
-Wall¾pÕdˆ—选项的å¦ä¸€ä¸ªæžç«¯æ˜¯-w选项åQŒå®ƒèƒ½å…³é—所有的è¦å‘Šä¿¡æ¯ã€?W{warning}选项的作用是打开warning所指出的用æˆäh„Ÿå…´è¶£çš„特ŒDŠè¦
告信æ?比如éšèín函数说明(-Wimplicit-function-declaration)或者éšíw«å£°æ˜Žè¿”回类型的函数(-Wreturn-
type).å‰è€…的作用在于它æ½Cºå‡ºå®šä¹‰äº†ä¸€ä¸ªå‡½æ•°å´æ²¡æœ‰äº‹å…ˆå£°æ˜Žæˆ–者忘è®îCº†åŒ…å«é€‚当的头文äšg.åŽè€…的作用在于指出声明的函数å¯èƒ½æ²¡æœ‰æŒ‡å®šå®ƒçš„返回类åž?
æ¤æ—¶é»˜è®¤çš„è¿”å›žç±»åž‹äØ“int.
æç¤º:å¦‚æžœåªæƒ³‹‚€æŸ¥è¯æ³•而实际上ä¸åšå¦‚何¾~–译工作,那么å¯ä»¥è°ƒç”¨å¸¦æœ‰-fsyntax-only傿•°çš„GCC.
选项
说明
-Wcomment
如果出现了注解嵌å¥?在第一ä¸?*之åŽåˆå‡ºçŽîCº†½W¬äºŒä¸?*)则å‘凸™¦å‘?br>
-Wformat
å¦‚æžœä¼ é€’ç»™printfåŠåŠå…¶ç›¸å…›_‡½æ•?
çš„å‚æ•°å’Œå¯¹åº”çš„æ ¼å¼å—½W¦ä¸²ä¸æŒ‡å®šçš„¾cÕdž‹ä¸åã^é…则å‘出è¦å‘Š
-Wmain
如果main的返回类型ä¸
是int或者调用mainæ—¶ä‹Éç”¨çš„å‚æ•°æ•°ç›®ä¸æ£¼‹®åˆ™ä¸å‡ºè¦å‘Š
-Wparentheses
如果在出çŽîCº†èµ‹å€?例如,(n=10))的地方ä‹É用了括å·,è€Œé‚£é‡Œæ ¹æ®å‰åŽå…³¾pÀLލæ–应该是比较(例如,(n==100))而éžèµ‹å€¼çš„æ—¶å€?或者如果括寂ƒ½å¤Ÿè§£å†Œ™¿½Ž—优先çñ”问题的时å€?å‘出è¦å‘Š
-Wswitch
如果swtichè¯å¥ž®‘了它的一个或å¤?
个枚丑ր¼çš„case分支(åªæœ‰ç´¢å¼•值是enum¾cÕdž‹æ—¶æ‰é€‚用)则å‘凸™¦å‘?br>
-Wunused
如果声明的å˜é‡æ²¡æœ‰ä‹Éç”?或者函数声æ˜?
为static¾cÕdž‹ä½†å´ä»Žæœªä½¿ç”¨,则å‘凸™¦å‘?br>
-Wuninitialized
如果使用的自动å˜é‡æ²¡æœ‰åˆå§‹åŒ–则å‘凸™¦å‘?br>
-Wundef
如果åœ?ifå®ä¸ä½¿ç”¨äº†æœªå®šä¹‰çš„å˜é‡ä½œåˆ¤æ–则å‘凸™¦å‘?br>
-Winline
如果函数ä¸èƒ½è¢«å†…è”则å‘出è¦å‘Š
-Wmissing-declarations å¦‚æžœå®šä¹‰äº†å…¨å±€å‡½æ•°ä½†å´æ²¡æœ‰åœ¨ä“Q何头文äšgä¸å£°æ˜Žå®ƒ,则å‘凸™¦å‘?br>
-Wlong-long
如果使用了long long¾cÕdž‹åˆ™å‘凸™¦å‘?br>
-Werror
ž®†æ‰€æœ‰çš„è¦å‘Šè½¬å˜ä¸ºé”™è¯?br>
常è§çš„ç¼–½E‹é”™è¯?
/*
* blunder.c - Mistakes caught by
-W(warning)
*/
#include <stdio.h>
#include
<stdlib.h>
int main(int argc, char *argv[])
{
int i,
j;
printf("%c\n", "not a character"); /* -Wformat */
if(i =
10) /*
-Wparenthesses */
printf("oops\n");
if(j !=
10)
/* -Wuninitialized */
printf("another oops\n");
/* /*
*/ /*
-Wcomment */
no_decl(); /*
-Wmissing-declaration */
return (EXIT_SUCCESS);
}
void
no_decl(void)
{
printf("no_decl\n");
}
$gcc blunder.c -o
blunder
blunder.c:27: warning: type mismatch with previous implicit
declaration
blunder.c:21: warning: previous implicit declaration of
'no_decl'
blunder.c:27: warning: 'no_decl' was previously implicitly declared
to return
'int'
gccåªå‘å‡ÞZº†å’Œéšå¼å£°æ˜Žno_decl函数有关的è¦å‘?它忽略了其他潜在的错è¯?˜q™äº›é”™è¯¯åŒ…括:
.ä¼ é€’ç»™printfçš„å‚æ•°ç±»åž?一个嗽W¦ä¸²)å’Œæ ¼å¼åŒ–å—符串定义的¾cÕdž‹(一个嗽W?ä¸åŒ¹é…?˜q™ä¼šäº§ç”Ÿä¸€ä¸?Wformatè¦å‘Š.
.å˜é‡iå’Œj使用å‰éƒ½æ²¡æœ‰åˆå§‹åŒ?它们ä¸çš„ä»ÖM½•一个都产生-Wuninitializedè¦å‘Š.
.åœ¨æ ¹æ®å‰åŽå…³¾pÀLލæ–应该对å˜é‡içš„å€¼åšæ¯”较的地æ–?å´å¯¹å˜é‡i˜q›è¡Œèµ‹å€?˜q™åº”该会产生一ä¸?Wparenthesesè¦å‘Š.
.在注释嵌套开始的地方应该会äñ”生一ä¸?Wcommentè¦å‘Š. ]]> gccå‡½æ•°åº“å’ŒåŒ…å«æ–‡äšg http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9337.htmlivaneeo ivaneeo Thu, 04 Aug 2005 14:02:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9337.html http://www.aygfsteel.com/ivanwan/comments/9337.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9337.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9337.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9337.html
$gcc
myapp.c -I /home/fred/include -o
myapp
-L选项对库文äšgèµïLš„作用å’?I选项告诉gcc把DIRNAMEæ·ÕdŠ åˆ°åº“æ–‡äšgæœçƒ¦è·¯å¾„é‡?è¦ä¿è¯DIRNAMEæ¯”æ ‡å‡†ä½¾|®å…ˆè¢«æœç´?
å‡è®¾è¯»è€…éœ€è¦æµ‹è¯•一个新的编½E‹åº“libnew.so,当å‰å®ƒä¿å˜åœ¨/home/fred/libä¸?.so是共享库文äšgçš„æ ‡å‡†æ‰©å±•å).ä¸ÞZº†é“¾æŽ¥åº“æ–‡ä»?gcc命ä×o行应与下é¢ç±»ä¼?
$gcc
myapp.c -L/home/fred/lib -lnew -o
myapp
-L/home/fred/lib¾l“构让gcc先在/home/fred/lib下查扑ֺ“æ–‡äšg,ç„¶åŽå†åˆ°é»˜è®¤çš„库文äšgæœçƒ¦è·¯å¾„下进行查æ‰?-l选项使得é“?
接程åºä‹É用指定的函数库ä¸çš„ç›®æ ‡ä»£ç ?也就是本例ä¸çš„libnew.so.把函数库命å为lib{åå—}是UNIX的约å®?与许多其他编译器一æ ?gcc
也éµå¾ªæ¤¾U¦å®š.如果忘了使用-l选项,则与库的链接ž®†å¤±è´?òq¶ä¸”gcc产生错误,说明½E‹åºä¸å¼•用了未定义的函数å?
默认情况ä¸?gcc使用å…׃ín库进行链æŽ?所以在需è¦é“¾æŽ¥é™æ€åº“æ—¶å¿…™åÖM‹Éç”?static选项æ¥ä¿è¯åªä½¿ç”¨é™æ€åº“.
$gcc
cursesapp.c -lncurses -static -o
cursesapp
åœ¨é“¾æŽ¥é™æ€åº“æ—?坿‰§è¡Œç¨‹åºçš„大尿¯”链接共享库è¦è¾¾å¾ˆå¤š.使用å…׃ín库时,½E‹åºæ‰€ä½¿ç”¨çš„ä»£ç æ˜¯åœ¨è¿è¡Œæ—¶åЍæ€é“¾æŽ?è€Œä¸æ˜¯åœ¨¾~–译旉™™æ€é“¾æŽ?å› æ¤,如果所需è¦çš„å…׃ín库没有在用户¾pÈ»Ÿä¸å®‰è£?˜q行ž®×ƒ¼šå¤ÞpÓ|. ]]> gccçš„Hello World http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9335.htmlivaneeo ivaneeo Thu, 04 Aug 2005 14:01:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9335.html http://www.aygfsteel.com/ivanwan/comments/9335.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9335.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9335.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9335.html
/*
* hello.c - Canonical "Hello, World!" program
*/
#include
<stdio.h>
int main(void)
{
printf("Hello,Linux programming
world!\n");
return 0;
}
在命令行上键入以下命令编译和˜q行˜q™æ®µ½E‹åº:
$gcc hello.c -o
hello
$./hello
Hello, Linux programming
world!
½W¬ä¸€è¡Œå‘½ä»¤å‘Šè¯‰gccå¯ÒŽºä»£ç hello.c˜q›è¡Œ¾~–译和链æŽ?òq¶ä‹Éç”?o傿•°æŒ‡å®šåˆ›å¾å䨓helloçš„å¯è§ç¨‹åº?½W¬äºŒè¡Œå‘½ä»¤æ‰§è¡Œhello˜q™ä¸ª½E‹åº,½W¬ä¸‰è¡Œæ˜¯½E‹åºçš„æ‰§è¡Œç»“æž?
其实,gcc首先˜q行预处ç†ç¨‹åºcppæ¥å±•å¼€hello.cä¸çš„å®åÆˆåœ¨å…¶ä¸æ’å…?includeæ–‡äšg所包å«çš„内å®?ç„¶åŽæŠŠé¢„å¤„ç†åŽçš„æºä»£ç 编译æˆä¸ºç›®æ ‡ä»£ç ?最å?链接½E‹åºld创å¾ä¸€ä¸ªå为hello的二˜q›åˆ¶æ–‡äšg.
现在我们æ¥é€šè¿‡æ‰‹å·¥æ“ä½œé‡æ–°åˆ›å¾˜q™äº›æ¥éª¤,以逿¥æ‰§è¡Œ¾~–译˜q‡ç¨‹.½W¬ä¸€å¸ƒæ˜¯˜q行预处ç†å™¨.使用-E选项告诉gcc在预处ç†åŽåœæ¢ç¼–译过½E?
$gcc
-E hello.c -o
hello.cpp
æ¤æ—¶æŸ¥çœ‹hello.cpp会å‘现stdio.h的内容确实都æ’到文äšg里去äº?而其他应当被预处ç†çš„æ ‡è®°ä¹Ÿåšäº†ç±»ä¼¼å¤„ç?
ä¸‹ä¸€æ¥æ˜¯ž®†hello.cpp¾~–è¯‘ä¸ºç›®æ ‡ä»£ç ?å¯ä‹É用gccçš?c选项æ¥å®Œæˆ?
$gcc
-x cpp-output -c hello.cpp -o
hello.o
-x选项告诉gcc从指定的æ¥éª¤å¼€å§‹ç¼–è¯?在本例ä¸ä¹Ÿå°±æ˜¯ç¼–译器处ç†åŽçš„æºä»£ç ?cpp-output).
gcc是怎么知é“å¦‚ä½•å¤„ç†æŸç§ç‰ÒޮоcÕdž‹çš„æ–‡ä»¶å‘¢?它是ä¾é æ–‡äšgçš„æ‰©å±•åæ¥å†³å®šå¦‚ä½•æ£¼‹®å¤„ç†è¯¥æ–‡äšgçš?
—————————————————————————————�br>
扩展å?nbsp;
¾cÕdž‹
.c
Cè¯è¨€æºä»£ç ?br>
.C,.cc
C++è¯è¨€æºä»£ç ?br>
.i
预处ç†åŽçš„Cæºä»£ç ?br>
.ii
预处ç†åŽçš„C++æºä»£ç ?br>
.S,.s
汇编è¯è¨€æºä»£ç ?br>
.o
¾~–译åŽçš„ç›®æ ‡ä»£ç
.a,.so
¾~–译åŽçš„库代ç ?br>
——————————————————————————————�br>
最å?é“¾æŽ¥ç›®æ ‡æ–‡äšg,生æˆäºŒè¿›åˆ¶ä»£ç ?
$gcc
hello.c -o hello ]]> gcc的常用命令行选项 http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9336.htmlivaneeo ivaneeo Thu, 04 Aug 2005 14:01:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9336.html http://www.aygfsteel.com/ivanwan/comments/9336.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9336.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9336.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9336.html
-o FILE 指定输出文äšgå?åœ¨ç¼–è¯‘äØ“ç›®æ ‡ä»£ç æ—?˜q™ä¸€é€‰é¡¹ä¸?
是必™åÈš„.如果FILE没有指定,默认文äšgåæ—¶a.out
-c
åªç¼–译ä¸é“¾æŽ¥
-DFOO=BAR 在命令行定义预处ç†å®FOO,å…¶å€égØ“BAR
-IDIRNAME ž®†DIRNAMEåŠ å…¥åˆ°åŒ…å«æ–‡ä»¶çš„æœçƒ¦ç›®å½•åˆ—è¡¨ä¸?br>
-LDIRNAME ž®†DIRNAMEåŠ å…¥åˆ°åº“æ–‡äšgçš„æœç´¢ç›®å½•列表ä¸
-static
é“¾æŽ¥é™æ€åº“,åÏx‰§è¡Œé™æ€é“¾æŽ¥é»˜è®¤æƒ…况下gccåªé“¾æŽ¥å…±äº«åº“
-IFOO 链接å䨓libFOO的函数库
-g
åœ¨å¯æ‰§è¡Œ½E‹åºä¸åŒ…嫿 ‡å‡†è°ƒè¯•ä¿¡æ?br>
-ggdb åœ¨å¯æ‰§è¡Œ½E‹åºä¸åŒ…å«åªæœ‰GNU
debugger(gdb)æ‰èƒ½è¯†åˆ«å¤§é‡è°ƒè¯•ä¿¡æ¯
-O
优化¾~–译˜q‡çš„代ç
-ON
指定代ç 优化的çñ”åˆ«äØ“N,0<=N<=
3,如果未指定N,则默认çñ”åˆ«äØ“1
-ansi 支æŒANSI/ISO
Cçš„æ ‡å‡†è¯æ³?å–æ¶ˆGNUçš„è¯æ³•扩展ä¸ä¸Žè¯¥æ ‡å‡†æœ‰å†²½H部åˆ?但这一选项òq¶ä¸èƒ½ä¿è¯ç”ŸæˆANSI兼容的代ç ?
-pedantic å…许å‘出ANSI/ISO
Cæ ‡å‡†æ‰€åˆ—å‡ºçš„æ‰€æœ‰è¦å‘?br>
-pedantic-errors å…许å‘出ANSI/ISO
Cæ ‡å‡†æ‰€åˆ—å‡ºçš„æ‰€æœ‰é”™è¯?br>
-traditional 支æŒKernighan & Ritchie C è¯æ³•
(如用旧å¼è¯æ³•定义函数).
-w
关闿‰€æœ‰è¦å‘?廸™®®ä¸è¦ä½¿ç”¨æ¤é¡¹
-Wall
å…许å‘出gcc能æä¾›çš„æ‰€æœ‰æœ‰ç”¨çš„è¦å‘Š.也å¯ä»¥ç”¨-W{warning}æ¥æ ‡
记指定的è¦å‘Š
-werror 把所有è¦å‘Šè{æ¢äؓ错误,以在è¦å‘Šå‘ç”Ÿæ—¶ä¸æ¢ç¼–译过½E?br>
-MM
输出一个make兼容的相兛_ˆ—è¡?br>
-v
昄¡¤ºåœ¨ç¼–译过½E‹çš„æ¯ä¸€æ¥ä¸ç”¨åˆ°çš„命ä»?img src ="http://www.aygfsteel.com/ivanwan/aggbug/9336.html" width = "1" height = "1" /> ]]> gcc¾~–译˜q‡ç¨‹ http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9334.htmlivaneeo ivaneeo Thu, 04 Aug 2005 14:00:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9334.html http://www.aygfsteel.com/ivanwan/comments/9334.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9334.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9334.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9334.html
.预处ç?和头文äšg*.h)
.适当¾~–译(生æˆç›®æ ‡ä»£ç†*.o)
.汇编
.链接(和引å¯ég»£ç ?库代ç ? ]]> gcc的其他调试技å·?/title><link>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9333.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 04 Aug 2005 13:59:00 GMT</pubDate><guid>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9333.html</guid><wfw:comment>http://www.aygfsteel.com/ivanwan/comments/9333.html</wfw:comment><comments>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ivanwan/comments/commentRss/9333.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ivanwan/services/trackbacks/9333.html</trackback:ping><description><![CDATA[其他的调试选项包括-på’?pg,它们ž®†å‰–æž?profiling)ä¿¡æ¯åŠ å…¥äºŒè¿›åˆ¶æ–‡ä»¶ä¸.˜q™äº›ä¿¡æ¯å¯¹äºŽæ‰‘Ö‡ºä»£ç ä¸çš„æ€§èƒ½ç“‰™¢ˆä»¥åŠå¼€å‘高性能的程åºéžå¸¸æœ‰
帮助.-p选项在代ç ä¸åŠ å…¥prof½E‹åºèƒ½å¤Ÿè¯Õd–的剖æžç¬¦åˆä¿¡æ?è€?pgé€‰é¡¹åŠ å…¥äº†GNU™å¹ç›®ä¸prof的化íw«gprof能够解释的符åˆä¿¡æ?-a选项
在代ç ä¸åР入代ç å?比如函数)累计使用的次æ•?<br>
<br>
-save-temps选项å¯ä»¥ä¿å˜åœ¨ç¼–译过½E‹ä¸ç”Ÿæˆçš„ä¸é—´æ–‡ä»?å…¶ä¸åŒ…æ‹¬ç›®æ ‡æ–‡äšg和汇¾~–ä»£ç æ–‡ä»?<br>
<br>
å¦‚æžœä½ å¯¹¾~–译器到底花费了多少旉™—´æ¥å®Œæˆå®ƒçš„工作感兴趣,å¯ä»¥è€ƒè™‘使用-Q选项,˜q™ä¸ªé€‰é¡¹è®©gcc昄¡¤º¾~–译˜q‡ç¨‹ä¸ç¢°åˆ°çš„æ¯ä¸ªå‡½æ•°,òq¶æä¾›ç¼–译器¾~–译æ¯ä¸ªå‡½æ•°æ‰€èŠ±æ—¶é—´çš„å‰–æžä¿¡æ¯.<img src ="http://www.aygfsteel.com/ivanwan/aggbug/9333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ivanwan/" target="_blank">ivaneeo</a> 2005-08-04 21:59 <a href="http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9333.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>gcc调试选项的实ä¾?/title><link>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9332.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 04 Aug 2005 13:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9332.html</guid><wfw:comment>http://www.aygfsteel.com/ivanwan/comments/9332.html</wfw:comment><comments>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9332.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ivanwan/comments/commentRss/9332.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ivanwan/services/trackbacks/9332.html</trackback:ping><description><![CDATA[$gcc -g hello.c -o hello<br>
$ls -l hello<br>
-rwxr-xr-x 1 kwall users 10275 May
21 23:27 hello<br>
<br>
$gcc -ggdb hello.c -o hello<br>
$ls -l hello<br>
-rwxr-xr-x
1 kwall users 8135 May 21 23:28
hello<br>
<br>
-g选项让二˜q›åˆ¶æ–‡äšg大å°å¢žé•¿åˆ°å°†˜q‘三å€?è€?ggdb选项也让其大ž®å¢žåŠ äº†ä¸€å€?ž®½ç®¡ä¼šä‹Éæ–‡äšg大å°å¢žé•¿,ä»ç„¶å»ø™®®åœ¨æ‰§è¡Œæ–‡ä»¶ä¸åŒ…嫿 ‡å‡†çš„调试符å?使用-g选项创å¾),以便æŸäº›ç”¨æˆ·åœ¨é‡åˆ°é—®é¢˜æ—¶å¯ä»¥è°ƒè¯•ä½ çš„ä»£ç .<img src ="http://www.aygfsteel.com/ivanwan/aggbug/9332.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ivanwan/" target="_blank">ivaneeo</a> 2005-08-04 21:58 <a href="http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9332.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>gcc调试选项 http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9330.htmlivaneeo ivaneeo Thu, 04 Aug 2005 13:57:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9330.html http://www.aygfsteel.com/ivanwan/comments/9330.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9330.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9330.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9330.html
回溯是指一个程åºè°ƒç”¨å‡½æ•°çš„历å².å †æ ˆè½¬å‚¨æ˜¯ä¸€ä¸ªé€šå¸¸ä»¥åŽŸå§‹çš„åå…æœºåˆ¶æ ¼å¼ä¿å˜½E‹åºæ‰§è¡ŒçŽ¯å¢ƒå†…å®¹çš„åˆ—è¡?åˆ—è¡¨å†…å®¹ä¸»è¦æ˜¯CPU寄å˜å™¨å’Œåˆ†é…¾l™ç¨‹åºçš„内å˜.注æ„,1¾U§è°ƒè¯•ä¸äº§ç”Ÿå±€éƒ¨å˜é‡å’Œè¡Œå·çš„调试信æ? ]]> gcc的优化选项 http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9331.htmlivaneeo ivaneeo Thu, 04 Aug 2005 13:57:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9331.html http://www.aygfsteel.com/ivanwan/comments/9331.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9331.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9331.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9331.html
选项 作用
-ffloat-store
¼›æ¢åœ¨CPU的寄å˜å™¨ä¸ä¿å˜æÕQ点å˜é‡çš„å€?˜q™èƒ½æŠŠCPU寄å˜å™¨èŠ‚çœä¸‹æ¥ç•™ä½œå®ƒç”?而且å¯ä»¥é˜²æ¢äº§ç”Ÿ˜q‡åˆ†¾_„¡¡®ä½†ä¸å¿…è¦çš„æÕQç‚ÒŽ•°.
-ffast-math
产生‹¹®ç‚¹æ•°å¦ä¼˜åŒ–,˜q™èƒ½æé«˜é€Ÿåº¦ä½†è¿å了IEEE或ANSI/ISOæ ‡å‡†.如果½E‹åºä¸éœ€è¦ä¸¥æ ¼éµå®ˆIEEE规范,å¯åœ¨¾~–译‹¹®ç‚¹å¯†é›†åž‹çš„½E‹åºæ—¶è€ƒè™‘采用˜q™ä¸€æ ‡å¿—
-finline-functions 把所有的"½Ž€å?函数在调用它们的函数ä¸å°±åœ°å±•å¼€.¾~–译器决定了什么是"½Ž€å?函数.å‡å°‘处ç†å™¨ä¸Žå‡½æ•°ç›¸å…³çš„开销是一¿U基本的优化技æœ?br>
-funroll-loops 展开所有能在编译时¼‹®å®šé‡å¤‹Æ¡æ•°çš„åó@环体.å±•å¼€å¾ªçŽ¯ä½“åŽæ¯æ¥å¾ªçŽ¯éƒ½èƒ½çœå‡ºå‡ æ¡CPU指ä×o,˜q™æ ·å¤§å¤§å‡å°‘了执行时é—?br>
-fomit-frame-pointer 如果函数ä¸éœ€è¦åˆ™ä¸¢æŽ‰æŒ‡é’ˆ,该指针ä¿å˜åœ¨CPU的一个寄å˜å™¨ä¸?å› äØ“åŽÀLŽ‰äº†è®¾¾|?ä¿å˜å’Œæ¢å¤å“áæŒ‡é’ˆæ‰€å¿…需的指ä»?æ‰€ä»¥åŠ å¿«äº†å¤„ç†é€Ÿåº¦.
-fschedule-insns 记录å¯èƒ½æš‚åœçš„æŒ‡ä»?å› äØ“å®ƒä»¬æ£åœ¨½{‰å€™çš„æ•°æ®ä¸åœ¨CPUä¸?br>
-fschedule-insns2
执行½W¬äºŒ‹Æ¡æŒ‡ä»¤é‡æŽ’åº(¾cÖM¼¼äº?fschedule-insns)
-fmove-all-movables
把所有出现在循环体内部但½E›_®šä¸å˜çš„计½Ž—移出åó@环体.˜q™ä»Žå¾ªçޝ体ä¸åŽ»é™¤äº†ä¸å¿…è¦çš„æ“ä½?åŠ å¿«äº†åó@环的整体˜q算速度.
内è”å’Œåó@环展开技术都能够大大æé«˜½E‹åºçš„æ‰§è¡Œé€Ÿåº¦,å› äØ“å®ƒä»¬éƒ½é¿å…了函数调用和å˜é‡æŸ¥æ‰„¡š„开销,但付出的代ähå¾€å¾€æ˜¯å¤§å¤§å¢žåŠ äº†ç›®æ ‡æˆ–äºŒ˜q›åˆ¶ä»£ç 的大ž®?
一般而言,Linux½E‹åºå‘˜ä¼¼ä¹Žçˆ±ç”¨ä¼˜åŒ–选项-O2. ]]> pgcc:奔腾处ç†å™¨çš„¾~–译å™?/title><link>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9328.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Thu, 04 Aug 2005 13:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9328.html</guid><wfw:comment>http://www.aygfsteel.com/ivanwan/comments/9328.html</wfw:comment><comments>http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9328.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ivanwan/comments/commentRss/9328.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ivanwan/services/trackbacks/9328.html</trackback:ping><description><![CDATA[pgcc的主è¦å¥½å¤„是它对Pentium处ç†å™¨çš„优化较好.<img src ="http://www.aygfsteel.com/ivanwan/aggbug/9328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ivanwan/" target="_blank">ivaneeo</a> 2005-08-04 21:56 <a href="http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9328.html#Feedback" target="_blank" style="text-decoration:none;">å‘表评论</a></div>]]></description></item><item><title>gcc优化实例 http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9329.htmlivaneeo ivaneeo Thu, 04 Aug 2005 13:56:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9329.html http://www.aygfsteel.com/ivanwan/comments/9329.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9329.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9329.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9329.html
/*
* pisqrt.c - Calculate the square of PI
100,000,000
*/
#include <stdio.h>
#include
<math.h>
int main(void)
{
double pi = M_PI; /* Defined in
<math.h> */
double pisqrt;
long i;
for(i = 0; i <
10000000; ++i) {
pisqrt = sqrt(pi);
}
return
0;
}
pisqrt的执行时�br>
æ ‡å¿—/优化
òq›_‡æ‰§è¡Œæ—‰™—´
<none>
5.43s
-O1 2.74s
-O2 2.83s
-O3 2.76s
-ffloat-store 5.41s
-ffast-math 5.46s
-funroll-loops
5.44s
-fschedule-insns
5.45s
-fschedule-insns2 5.44s
˜q™ä¸ªä¾‹å说明,除éžå¯¹å¤„ç†å™¨çš„体¾pÈ»“æž„éžå¸æ€º†è§£æˆ–è€…çŸ¥é“æŸ¿U特ŒDŠçš„ä¼˜åŒ–ä¸“é—¨é’ˆå¯¹ä½ çš„½E‹åºæœ‰åª„å“?å¦åˆ™ž®±åº”该ä‹É用优化选项-O. ]]> GNU C扩展 http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9327.htmlivaneeo ivaneeo Thu, 04 Aug 2005 13:55:00 GMT http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9327.html http://www.aygfsteel.com/ivanwan/comments/9327.html http://www.aygfsteel.com/ivanwan/archive/2005/08/04/9327.html#Feedback 0 http://www.aygfsteel.com/ivanwan/comments/commentRss/9327.html http://www.aygfsteel.com/ivanwan/services/trackbacks/9327.html
#ifdef __STRICT_ANSI__
/* use ANSI/ISO C only here
*/
#else
/* use GNU extensions here
*/
#endif
如果用户或是ANSI兼容的编译器定义了__STRICT_ANSI__å®?åˆ™è¡¨æ˜Žéœ€æ–½åŠ ANSI兼容的环å¢?òq¶ç¼–è¯?ifdefè¯å¥å—çš„½W¬ä¸€éƒ¨åˆ†ä»£ç .å¦åˆ™,¾~–译#elseåŽé¢çš„代ç ?
2.GNU扩展
gcc使用long
long ¾cÕdž‹æ¥æä¾?4ä½å‚¨å˜å•å…?
long long
long_int_var;
内è”函数
è¦ä‹É用内è”函æ•?需在函数的˜q”回¾cÕdž‹å‰é¢æ’入关键å—inline,如下é¢çš„代ç 片段所½C?˜q˜è¦åœ¨ç¼–译时使用-O优化选项.
inline
void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b
=
tmp;
}
函数和å˜é‡å±žæ€?br>
关键å—attribute通过å‘gcc指明有关代ç çš„æ›´å¤šä¿¡æ¯æ¥å¸®åЩ代ç 优化工作˜q›è¡Œå¾—æ›´å¥?例如,æ ‡å‡†åº“å‡½æ•°exitå’?
abort都丘q”回调用它们的函æ•?¾~–译器如果知é“它们丘q”回ž®Þpƒ½ç”Ÿæˆæ•ˆçއ½E高的代ç ?当然用户½E‹åºä¹Ÿèƒ½å®šä¹‰ä¸è¿”回的函数.gccå…è®¸ä¸ø™¿™äº›å‡½æ•°æŒ‡å®?
noreturn属æ€?ä½œäØ“¾~–译器在优化该函数时的æ½C?
例如,å‡è®¾æœ‰ä¸ªæ²¡æœ‰˜q”回的函数die_on_error.ä¸ÞZº†ä½¿ç”¨å‡½æ•°å±žæ€?å¯ä»¥åœ¨å‡½æ•°å£°æ˜ŽåŽé¢åŠ ä¸Š__attribute__((attribute_name)).于是函数die_on_error的声明如ä¸?
void
die_on_error(void) __attribute__ ((noreturn));
函数˜q˜å’Œòq›_¸¸ä¸€æ äh¥å®šä¹‰:
#include
<stdlib.h>
void die_on_error(void)
{
/* your code here
*/
exit(EXIT_FAILURE);
}
也å¯ä»¥å¯¹å˜é‡æŒ‡å®šå±žæ€?例如,aligned属性指½Cºç¼–è¯‘å™¨åœ¨äØ“å˜é‡åˆ†é…内嘽Iºé—´æ—¶æŒ‰æŒ‡å®šå—节数对é½è¾¹ç•?下列è¯å¥:
int
int_var __attribute__ ((aligned 16)) =
0;
使gcc让å˜é‡int_var的边界按16å—节寚w½.packed属性告诉gcc为å˜é‡æˆ–¾l“æž„åˆ†é…æœ€ž®çš„内嘽Iºé—´.
如果惌™¦å…³é—å¯ÒŽœªç”¨å˜é‡å‘出的所有è¦å‘?那么å¯ä»¥å¯¹å˜é‡ä‹É用unused属æ€?它告诉编译器该å˜é‡ä¸å‡†å¤‡ä½¿ç”¨.下é¢çš„å˜é‡å£°æ˜Žä¼šæ¶ˆé™¤è¦å‘Š:
float
big_salary __attribute__
((unused));
使用case区间
case区间是一个éžå¸¸æœ‰ç”¨çš„æ‰©å±•.å…¶è¯æ³•如ä¸?
case LOWVAL ...
LOWVAL:
注æ„,在çœç•¥å·å‰åŽå¿…须有空æ ?在switchè¯å¥ä¸?case区间指定了è½åœ¨LOWVALå’ŒHIVAL区间内的那些整数å€?例如:
switch(int_var)
{
case 0 ... 2:
/* your code here */
break;
case 3 ...
5:
/* more code here */
break;
default:
/* default
code here
*/
}
æž„é€ å‡½æ•°å¿U?br>
把函数å用作å—符串是GNU的扩å±?它能æžå¤§åœ°ç®€åŒ–调试工ä½?gcc预先定义了å˜é‡__FUNCTION__为当å‰å‡½æ•?控制‹¹ç¨‹å½“剿‰€åœ¨çš„ä½ç½®)çš„åå?ž®±å¥½åƒå®ƒè¢«å†™åœ¨æºä»£ç 里去了一æ ?
使用__FUNCTION__å˜é‡
/*
* showit.c
- Illustrate using the __FUNCTION__ variable
*/
#include
<stdio.h>
void foo(void);
int
main(void)
{
printf("The current function is %s\n",
__FUNCTION__);
foo();
return 0;
}
void
foo(void)
{
printf("The current function is %s\n", __FUNCTION__);
} ]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º
Ì©ÖÝÊÐ |
Û³ÁêÏØ |
èëµéÊÐ |
¸ÊÂåÏØ |
ÌÆº£ÏØ |
ÒË´ºÊÐ |
ÎijÉÏØ |
΢²© |
Ï¢·éÏØ |
ʯʨÊÐ |
ÎÄÉ½ÏØ |
ÄÏ¿ªÇø |
ºþ±±Ê¡ |
¼Ò¾Ó |
Ì©À´ÏØ |
½ÓÀÏØ |
³ç×óÊÐ |
ÂåÆÖÏØ |
μÄÏÊÐ |
ÄþÄÏÏØ |
´Ó»¯ÊÐ |
ÑÓ½òÏØ |
¶Ø»¯ÊÐ |
Ô£ÃñÏØ |
Ïå·ÚÏØ |
ÐËÒåÊÐ |
ÁÙÏÄÏØ |
Áø½ÏØ |
ÏóÉ½ÏØ |
½Ò¶«ÏØ |
ÀÉÏªÏØ |
°ÍÌÁÏØ |
ÐÂÐËÏØ |
¹ã×ÚÏØ |
½°²ÏØ |
ÓñÆÁ |
ÕòÆ½ÏØ |
³Î½ÏØ |
¹¢Âí |
³¤É³ÊÐ |
ºþÄÏÊ¡ |