*
è¿è¡ gcc/egcs
*
gcc/egcs ç主è¦é项
*
gdb
*
gdb ç常ç¨å½ä»¤
*
gdb 使ç¨èä¾
*
å
¶ä»ç¨åº/åºå·¥å
· (ar, objdump, nm, size, strings, strip, ...)
* å建å使ç¨éæåº
* å建å使ç¨å
±äº«åº
* 使ç¨é«çº§å
±äº«åºç¹æ§
1.7.1 è¿è¡ gcc/egcs
Linux ä¸æéè¦ç软件å¼åå·¥å
·æ¯ GCCãGCC æ¯ GNU ç C å C++ ç¼è¯å¨ãå®é
ä¸ï¼GCC è½å¤ç¼è¯ä¸ç§è¯è¨ï¼CãC++ å Object Cï¼C è¯è¨çä¸ç§é¢å对象æ©å±ï¼ãå©ç¨ gcc å½ä»¤å¯åæ¶ç¼è¯å¹¶è¿æ¥ C å C++ æºç¨åºã
#DEMO#: hello.c
å¦æä½ æ两个æå°æ°å 个 C æºæ件ï¼ä¹å¯ä»¥æ¹ä¾¿å°å©ç¨ GCC ç¼è¯ãè¿æ¥å¹¶çæå¯æ§è¡æ件ãä¾å¦ï¼åè®¾ä½ æ两个æºæ件 main.c å factorial.c 两个æºæ件ï¼ç°å¨è¦ç¼è¯çæä¸ä¸ªè®¡ç®é¶ä¹çç¨åºã
-----------------------
æ¸
å factorial.c
-----------------------
#include <stdio.h>
#include <stdlib.h>
int factorial (int n)
{
if (n <= 1)
return 1;
else
return factorial (n - 1) * n;
}
-----------------------
-----------------------
æ¸
å main.c
-----------------------
#include <stdio.h>
#include <stdlib.h>
int factorial (int n);
int main (int argc, char **argv)
{
int n;
if (argc < 2) {
printf ("Usage: %s n\n", argv [0]);
return -1;
}
else {
n = atoi (argv[1]);
printf ("Factorial of %d is %d.\n", n, factorial (n));
}
return 0;
}
-----------------------
å©ç¨å¦ä¸çå½ä»¤å¯ç¼è¯çæå¯æ§è¡æ件ï¼å¹¶æ§è¡ç¨åºï¼
$ gcc -o factorial main.c factorial.c
$ ./factorial 5
Factorial of 5 is 120.
GCC å¯åæ¶ç¨æ¥ç¼è¯ C ç¨åºå C++ ç¨åºãä¸è¬æ¥è¯´ï¼C ç¼è¯å¨éè¿æºæ件çåç¼åæ¥å¤ææ¯ C ç¨åºè¿æ¯ C++ ç¨åºãå¨ Linux ä¸ï¼C æºæ件çåç¼å为 .cï¼è C++ æºæ件çåç¼å为 .C æ .cppã
ä½æ¯ï¼gcc å½ä»¤åªè½ç¼è¯ C++ æºæ件ï¼èä¸è½èªå¨å C++ ç¨åºä½¿ç¨çåºè¿æ¥ãå æ¤ï¼éå¸¸ä½¿ç¨ g++ å½ä»¤æ¥å®æ C++ ç¨åºçç¼è¯åè¿æ¥ï¼è¯¥ç¨åºä¼èªå¨è°ç¨ gcc å®ç°ç¼è¯ãå设æ们æä¸ä¸ªå¦ä¸ç C++ æºæ件ï¼hello.Cï¼ï¼
#include <iostream.h>
void main (void)
{
cout << "Hello, world!" << endl;
}
åå¯ä»¥å¦ä¸è°ç¨ g++ å½ä»¤ç¼è¯ãè¿æ¥å¹¶çæå¯æ§è¡æ件ï¼
$ g++ -o hello hello.C
$ ./hello
Hello, world!
1.7.2 gcc/egcs ç主è¦é项
表 1-3 gcc å½ä»¤ç常ç¨é项
é项 解é
-ansi åªæ¯æ ANSI æ åç C è¯æ³ãè¿ä¸é项å°ç¦æ¢ GNU C çæäºç¹è²ï¼
ä¾å¦ asm æ typeof å
³é®è¯ã
-c åªç¼è¯å¹¶çæç®æ æ件ã
-DMACRO 以å符串â1âå®ä¹ MACRO å®ã
-DMACRO=DEFN 以å符串âDEFNâå®ä¹ MACRO å®ã
-E åªè¿è¡ C é¢ç¼è¯å¨ã
-g çæè°è¯ä¿¡æ¯ãGNU è°è¯å¨å¯å©ç¨è¯¥ä¿¡æ¯ã
-IDIRECTORY æå®é¢å¤ç头æ件æ索路å¾DIRECTORYã
-LDIRECTORY æå®é¢å¤çå½æ°åºæ索路å¾DIRECTORYã
-lLIBRARY è¿æ¥æ¶æç´¢æå®çå½æ°åºLIBRARYã
-m486 é对 486 è¿è¡ä»£ç ä¼åã
-o FILE çææå®çè¾åºæ件ãç¨å¨çæå¯æ§è¡æ件æ¶ã
-O0 ä¸è¿è¡ä¼åå¤çã
-O æ -O1 ä¼åçæ代ç ã
-O2 è¿ä¸æ¥ä¼åã
-O3 æ¯ -O2 æ´è¿ä¸æ¥ä¼åï¼å
æ¬ inline å½æ°ã
-shared çæå
±äº«ç®æ æ件ãé常ç¨å¨å»ºç«å
±äº«åºæ¶ã
-static ç¦æ¢ä½¿ç¨å
±äº«è¿æ¥ã
-UMACRO åæ¶å¯¹ MACRO å®çå®ä¹ã
-w ä¸çæä»»ä½è¦åä¿¡æ¯ã
-Wall çæææè¦åä¿¡æ¯ã
#DEMO#
MiniGUI çç¼è¯é项
1.7.3 gdb
GNU çè°è¯å¨ç§°ä¸º gdbï¼è¯¥ç¨åºæ¯ä¸ä¸ªäº¤äºå¼å·¥å
·ï¼å·¥ä½å¨å符模å¼ãå¨ X Window ç³»ç»ä¸ï¼
æä¸ä¸ª gdb çå端å¾å½¢å·¥å
·ï¼ç§°ä¸º xxgdbãgdb æ¯åè½å¼ºå¤§çè°è¯ç¨åºï¼å¯å®æå¦ä¸çè°è¯
ä»»å¡ï¼
* 设置æç¹ï¼
* çè§ç¨åºåéçå¼ï¼
* ç¨åºçåæ¥æ§è¡ï¼
* ä¿®æ¹åéçå¼ã
å¨å¯ä»¥ä½¿ç¨ gdb è°è¯ç¨åºä¹åï¼å¿
é¡»ä½¿ç¨ -g é项ç¼è¯æºæ件ãå¯å¨ makefile ä¸å¦ä¸å®ä¹
CFLAGS åéï¼
CFLAGS = -g
è¿è¡ gdb è°è¯ç¨åºæ¶é常使ç¨å¦ä¸çå½ä»¤ï¼
gdb progname
å¨ gdb æ示符å¤é®å
¥helpï¼å°ååºå½ä»¤çåç±»ï¼ä¸»è¦çåç±»æï¼
* aliasesï¼å½ä»¤å«å
* breakpointsï¼æç¹å®ä¹ï¼
* dataï¼æ°æ®æ¥çï¼
* filesï¼æå®å¹¶æ¥çæ件ï¼
* internalsï¼ç»´æ¤å½ä»¤ï¼
* runningï¼ç¨åºæ§è¡ï¼
* stackï¼è°ç¨æ æ¥çï¼
* statuï¼ç¶ææ¥çï¼
* tracepointsï¼è·è¸ªç¨åºæ§è¡ã
é®å
¥ help åè·å½ä»¤çåç±»åï¼å¯è·å¾è¯¥ç±»å½ä»¤ç详ç»æ¸
åã
#DENO#
1.7.4 gdb ç常ç¨å½ä»¤
表 1-4 常ç¨ç gdb å½ä»¤
å½ä»¤ 解é
break NUM å¨æå®çè¡ä¸è®¾ç½®æç¹ã
bt æ¾ç¤ºææçè°ç¨æ 帧ã该å½ä»¤å¯ç¨æ¥æ¾ç¤ºå½æ°çè°ç¨é¡ºåºã
clear å é¤è®¾ç½®å¨ç¹å®æºæ件ãç¹å®è¡ä¸çæç¹ãå
¶ç¨æ³ä¸ºï¼clear FILENAME:NUMã
continue 继ç»æ§è¡æ£å¨è°è¯çç¨åºã该å½ä»¤ç¨å¨ç¨åºç±äºå¤çä¿¡å·ææç¹è
导è´åæ¢è¿è¡æ¶ã
display EXPR æ¯æ¬¡ç¨åºåæ¢åæ¾ç¤ºè¡¨è¾¾å¼çå¼ã表达å¼ç±ç¨åºå®ä¹çåéç»æã
file FILE è£
è½½æå®çå¯æ§è¡æ件è¿è¡è°è¯ã
help NAME æ¾ç¤ºæå®å½ä»¤ç帮å©ä¿¡æ¯ã
info break æ¾ç¤ºå½åæç¹æ¸
åï¼å
æ¬å°è¾¾æç¹å¤ç次æ°çã
info files æ¾ç¤ºè¢«è°è¯æ件ç详ç»ä¿¡æ¯ã
info func æ¾ç¤ºææçå½æ°å称ã
info local æ¾ç¤ºå½å½æ°ä¸çå±é¨åéä¿¡æ¯ã
info prog æ¾ç¤ºè¢«è°è¯ç¨åºçæ§è¡ç¶æã
info var æ¾ç¤ºææçå
¨å±åéæåéå称ã
kill ç»æ¢æ£è¢«è°è¯çç¨åºã
list æ¾ç¤ºæºä»£ç 段ã
make å¨ä¸éåº gdb çæ
åµä¸è¿è¡ make å·¥å
·ã
next å¨ä¸åæ¥æ§è¡è¿å
¥å
¶ä»å½æ°çæ
åµä¸ï¼ååæ§è¡ä¸è¡æºä»£ç ã
print EXPR æ¾ç¤ºè¡¨è¾¾å¼ EXPR çå¼ã
1.7.5 gdb 使ç¨èä¾
-----------------
æ¸
å ä¸ä¸ªæé误ç C æºç¨åº bugging.c
-----------------
#include <stdio.h>
#include <stdlib.h>
static char buff [256];
static char* string;
int main ()
{
printf ("Please input a string: ");
gets (string);
printf ("\nYour string is: %s\n", string);
}
-----------------
ä¸é¢è¿ä¸ªç¨åºé常ç®åï¼å
¶ç®çæ¯æ¥åç¨æ·çè¾å
¥ï¼ç¶åå°ç¨æ·çè¾å
¥æå°åºæ¥ã该ç¨åºä½¿ç¨äº
ä¸ä¸ªæªç»è¿åå§åçå符串å°å stringï¼å æ¤ï¼ç¼è¯å¹¶è¿è¡ä¹åï¼å°åºç° Segment Fault é误ï¼
$ gcc -o test -g test.c
$ ./test
Please input a string: asfd
Segmentation fault (core dumped)
为äºæ¥æ¾è¯¥ç¨åºä¸åºç°çé®é¢ï¼æ们å©ç¨ gdbï¼å¹¶æå¦ä¸çæ¥éª¤è¿è¡ï¼
1ï¼è¿è¡ gdb bugging å½ä»¤ï¼è£
å
¥ bugging å¯æ§è¡æ件ï¼
2ï¼æ§è¡è£
å
¥ç bugging å½ä»¤ï¼
3ï¼ä½¿ç¨ where å½ä»¤æ¥çç¨åºåºéçå°æ¹ï¼
4ï¼å©ç¨ list å½ä»¤æ¥çè°ç¨ gets å½æ°éè¿ç代ç ï¼
5ï¼å¯ä¸è½å¤å¯¼è´ gets å½æ°åºéçå ç´ å°±æ¯åé stringãç¨ print å½ä»¤æ¥ç string çå¼ï¼
6ï¼å¨ gdb ä¸ï¼æ们å¯ä»¥ç´æ¥ä¿®æ¹åéçå¼ï¼åªè¦å° string åä¸ä¸ªåæ³çæéå¼å°±å¯ä»¥äºï¼ä¸º
æ¤ï¼æ们å¨ç¬¬ 11 è¡å¤è®¾ç½®æç¹ï¼
7ï¼ç¨åºéæ°è¿è¡å°ç¬¬ 11 è¡å¤åæ¢ï¼è¿æ¶ï¼æ们å¯ä»¥ç¨ set variable å½ä»¤ä¿®æ¹ string çåå¼ï¼
8ï¼ç¶å继ç»è¿è¡ï¼å°çå°æ£ç¡®çç¨åºè¿è¡ç»æã
#DEMO#
1.7.6 å
¶ä»ç¨åº/åºå·¥å
·
stripï¼
nmï¼
sizeï¼
stringï¼
1.7.7 å建å使ç¨éæåº
å建ä¸ä¸ªéæåºæ¯ç¸å½ç®åçãéå¸¸ä½¿ç¨ ar ç¨åºæä¸äºç®æ æ件ï¼.oï¼ç»åå¨ä¸èµ·ï¼æ为ä¸ä¸ªåç¬çåºï¼ç¶åè¿è¡ ranlibï¼ä»¥ç»åºå å
¥ä¸äºç´¢å¼ä¿¡æ¯ã
1.7.8 å建å使ç¨å
±äº«åº
ç¹æ®çç¼è¯åè¿æ¥é项
-D_REENTRANT 使å¾é¢å¤çå¨ç¬¦å· _REENTRANT 被å®ä¹ï¼è¿ä¸ªç¬¦å·æ¿æ´»ä¸äºå®ç¹æ§ã
-fPIC é项产çä½ç½®ç¬ç«ç代ç ãç±äºåºæ¯å¨è¿è¡çæ¶å被è°å
¥ï¼å æ¤è¿ä¸ª
é项æ¯å¿
éçï¼å 为å¨ç¼è¯çæ¶åï¼è£
å
¥å
åçå°åè¿ä¸ç¥éãå¦æ
ä¸ä½¿ç¨è¿ä¸ªé项ï¼åºæ件å¯è½ä¸ä¼æ£ç¡®è¿è¡ã
-shared é项åè¯ç¼è¯å¨äº§çå
±äº«åºä»£ç ã
-Wl,-soname -Wl åè¯ç¼è¯å¨å°åé¢çåæ°ä¼ éå°è¿æ¥å¨ãè -soname æå®äº
å
±äº«åºç sonameã
ï¼ å¯ä»¥æåºæ件æ·è´å° /etc/ld.so.conf ä¸å举åºçä»»ä½ç®å½ä¸ï¼å¹¶ä»¥
root 身份è¿è¡ ldconfigï¼æè
ï¼ è¿è¡ export LD_LIBRARY_PATH='pwd'ï¼å®æå½åè·¯å¾å å°åºæ索路å¾ä¸å»ã
1.7.9 使ç¨é«çº§å
±äº«åºç¹æ§
1. ldd å·¥å
·
ldd ç¨æ¥æ¾ç¤ºæ§è¡æ件éè¦åªäºå
±äº«åº, å
±äº«åºè£
载管çå¨å¨åªéæ¾å°äºéè¦çå
±äº«åº.
2. soname
å
±äº«åºçä¸ä¸ªé常éè¦çï¼ä¹æ¯é常é¾çæ¦å¿µæ¯ sonameââç®åå
±äº«ç®æ åï¼short for shared object nameï¼ãè¿æ¯ä¸ä¸ªä¸ºå
±äº«åºï¼.soï¼æ件èå
åµå¨æ§å¶æ°æ®ä¸çååãå¦åé¢æå°çï¼æ¯ä¸ä¸ªç¨åºé½æä¸ä¸ªéè¦ä½¿ç¨çåºçæ¸
åãè¿ä¸ªæ¸
åçå
容æ¯ä¸ç³»ååºç sonameï¼å¦å ldd æ¾ç¤ºçé£æ ·ï¼å
±äº«åºè£
è½½å¨å¿
é¡»æ¾å°è¿ä¸ªæ¸
åã
soname çå
³é®åè½æ¯å®æä¾äºå
¼å®¹æ§çæ åãå½è¦å级系ç»ä¸çä¸ä¸ªåºæ¶ï¼å¹¶ä¸æ°åºç soname åèçåºç soname ä¸æ ·ï¼ç¨æ§åºè¿æ¥çæçç¨åºï¼ä½¿ç¨æ°çåºä¾ç¶è½æ£å¸¸è¿è¡ãè¿ä¸ªç¹æ§ä½¿å¾å¨ Linux ä¸ï¼å级使ç¨å
±äº«åºçç¨åºåå®ä½é误åå¾åå容æã
å¨ Linux ä¸ï¼åºç¨ç¨åºéè¿ä½¿ç¨ sonameï¼æ¥æå®æå¸æåºççæ¬ãåºä½è
ä¹å¯ä»¥éè¿ä¿çæè
æ¹å soname æ¥å£°æï¼åªäºçæ¬æ¯ç¸äºå
¼å®¹çï¼è¿ä½¿å¾ç¨åºåæè±äºå
±äº«åºçæ¬å²çªé®é¢çå°æ°ã
æ¥ç/usr/local/lib ç®å½ï¼åæ MiniGUI çå
±äº«åºæ件ä¹é´çå
³ç³»
3. å
±äº«åºè£
è½½å¨
å½ç¨åºè¢«è°ç¨çæ¶åï¼Linux å
±äº«åºè£
è½½å¨ï¼ä¹è¢«ç§°ä¸ºå¨æè¿æ¥å¨ï¼ä¹èªå¨è¢«è°ç¨ãå®çä½ç¨æ¯ä¿è¯ç¨åºæéè¦çææéå½çæ¬çåºé½è¢«è°å
¥å
åãå
±äº«åºè£
è½½å¨ååæ¯ ld.so æè
æ¯ ld-linux.soï¼è¿åå³äº Linux libc ççæ¬ï¼å®å¿
须使ç¨ä¸ç¹å¤é¨äº¤äºï¼æè½å®æèªå·±çå·¥ä½ãç¶èå®æ¥åå¨ç¯å¢åéåé
ç½®æ件ä¸çé
置信æ¯ã
æ件 /etc/ld.so.conf å®ä¹äºæ åç³»ç»åºçè·¯å¾ãå
±äº«åºè£
è½½å¨æå®ä½ä¸ºæ索路å¾ã为äºæ¹åè¿ä¸ªè®¾ç½®ï¼å¿
须以 root 身份è¿è¡ ldconfig å·¥å
·ãè¿å°æ´æ° /etc/ls.so.cache æ件ï¼è¿ä¸ªæ件å
¶å®æ¯è£
è½½å¨å
é¨ä½¿ç¨çæ件ä¹ä¸ã
å¯ä»¥ä½¿ç¨è®¸å¤ç¯å¢åéæ§å¶å
±äº«åºè£
è½½å¨çæä½ï¼è¡¨1-4+ï¼ã
表 1-4+ å
±äº«åºè£
è½½å¨ç¯å¢åé
åé å«ä¹
LD_AOUT_LIBRARY_PATH é¤äºä¸ä½¿ç¨ a.out äºè¿å¶æ ¼å¼å¤ï¼ä¸ LD_LIBRARY_PATH ç¸åã
LD_AOUT_PRELOAD é¤äºä¸ä½¿ç¨ a.out äºè¿å¶æ ¼å¼å¤ï¼ä¸ LD_PRELOAD ç¸åã
LD_KEEPDIR åªéç¨äº a.out åºï¼å¿½ç¥ç±å®ä»¬æå®çç®å½ã
LD_LIBRARY_PATH å°å
¶ä»ç®å½å å
¥åºæ索路å¾ãå®çå
容åºè¯¥æ¯ç±åå·
åéçç®å½å表ï¼ä¸å¯æ§è¡æ件ç PATH åéå
·æç¸åçæ ¼å¼ã
å¦æè°ç¨è®¾ç½®ç¨æ· ID æè
è¿ç¨ ID çç¨åºï¼è¯¥åé被忽ç¥ã
LD_NOWARN åªéç¨äº a.out åºï¼å½æ¹åçæ¬å·æ¯ï¼ååºè¦åä¿¡æ¯ã
LD_PRELOAD é¦å
è£
å
¥ç¨æ·å®ä¹çåºï¼ä½¿å¾å®ä»¬ææºä¼è¦çæè
éæ°å®ä¹æ ååºã
使ç¨ç©ºæ ¼åå¼å¤ä¸ªå
¥å£ã对äºè®¾ç½®ç¨æ· ID æè
è¿ç¨ ID çç¨åºï¼
åªæ被æ è®°è¿çåºæ被é¦å
è£
å
¥ãå¨ /etc/ld.so.perload ä¸æå®
äºå
¨å±çæ¬å·ï¼è¯¥æ件ä¸éµå®è¿ä¸ªéå¶ã
4. ä½¿ç¨ dlopen
å¦å¤ä¸ä¸ªå¼ºå¤§çåºå½æ°æ¯ dlopen()ã该å½æ°å°æå¼ä¸ä¸ªæ°åºï¼å¹¶æå®è£
å
¥å
åã该å½æ°ä¸»è¦ç¨æ¥å è½½åºä¸ç符å·ï¼è¿äºç¬¦å·å¨ç¼è¯çæ¶åæ¯ä¸ç¥éçãæ¯å¦ Apache Web æå¡å¨å©ç¨è¿ä¸ªå½æ°å¨è¿è¡è¿ç¨ä¸å 载模åï¼è¿ä¸ºå®æä¾äºé¢å¤çè½åãä¸ä¸ªé
ç½®æ件æ§å¶äºå 载模åçè¿ç¨ãè¿ç§æºå¶ä½¿å¾å¨ç³»ç»ä¸æ·»å æè
å é¤ä¸ä¸ªæ¨¡åæ¶ï¼é½ä¸éè¦éæ°ç¼è¯äºã
å¯ä»¥å¨èªå·±çç¨åºä¸ä½¿ç¨ dlopen()ãdlopen() å¨ dlfcn.h ä¸å®ä¹ï¼å¹¶å¨ dl åºä¸å®ç°ãå®éè¦ä¸¤ä¸ªåæ°ï¼ä¸ä¸ªæ件ååä¸ä¸ªæ å¿ãæ件åå¯ä»¥æ¯æ们å¦ä¹ è¿çåºä¸ç sonameãæ å¿æææ¯å¦ç«å»è®¡ç®åºçä¾èµæ§ãå¦æ设置为 RTLD_NOW çè¯ï¼åç«å»è®¡ç®ï¼å¦æ设置çæ¯ RTLD_LAZYï¼åå¨éè¦çæ¶åæ计ç®ãå¦å¤ï¼å¯ä»¥æå® RTLD_GLOBALï¼å®ä½¿å¾é£äºå¨ä»¥åæå è½½çåºå¯ä»¥è·å¾å
¶ä¸ç符å·ã
å½åºè¢«è£
å
¥åï¼å¯ä»¥æ dlopen() è¿åçå¥æä½ä¸ºç» dlsym() ç第ä¸ä¸ªåæ°ï¼ä»¥è·å¾ç¬¦å·å¨åºä¸çå°åã使ç¨è¿ä¸ªå°åï¼å°±å¯ä»¥è·å¾åºä¸ç¹å®å½æ°çæéï¼å¹¶ä¸è°ç¨è£
è½½åºä¸çç¸åºå½æ°ã
温馨提示:内容为网友见解,仅供参考
linux 用g++编译c++代码的问题
在 Linux 中,C 源文件的后缀名为 .c,而 C++ 源文件的后缀名为 .C 或 .cpp。但是,gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。假设我们有一个如下的 C++ 源文件(hello.C):#include <iostream...
linux下g++编译c++程序关于include的几个问题,应该都比较简单。谢谢_百 ...
g++ -c -o Hello.o Hello.cpp 这样会生成两个编译出来的.o文件 然后用下面这样的命令进行链接。g++ -o MyFirst MyFirst.o Hello.o 注意,这里没有了-c参数。 但是列出了所有的.o文件。就是告诉链接器把哪些.o链接起来,生成可执行文件。这样就编译出了可执行文件MyFirst 当只有一个.cpp的时候...
ubuntu Linux下gcc\/g++编译c++程序,优化编译
在工作中,常常需要不同的优化级别来编译c++,当需要布在linux服务器上,或者其他情况下,我们需要用到linux下的c++编译器编译c++,常用的gcc\/g++。下面笔者分享一些简单的编译选项 一:将编辑好的程序保存,以笔者的helloworld程序为例,这里我写好程序,并保存在了 桌面上,如图一所示。二:右键桌面 选...
我是linux菜鸟,Linux的下的C\/C++如何调试呢?只能编译之后看错误信息么...
linux下调试用GDB啊,强大的调试工具,可以完胜vc vb等集成开发环境的调试功能。gdb可以完成 (1)设置断点 (2)监视程序变量的值 (3)程序单步执行 (4)修改变量的值等等功能。为了使用GDB调试,在编译源文件的时候必须使用 -g 选项加上调试信息 用法网上有很多,您可以找一找 ...
Linux下用g++编译c程序出错。。
你会看到生成了 c.o,其实,有目标文件就够了,如果你一定要做成(静态/动态)库文件,也是可以的,不过我这里就不深入了,做成库和直接用目标文件对解决你的问题没有任何区别。然后再编译C++文件,也就是我的 a.cpp g++ -o hello a.cpp c.o 看到了吧,我在编译 a.cpp 的时候把C生成的 c...
怎么在linux中编译与运行c++的原代码*.cpp文件
不是用make,是用g++,比如,你的文件名是test.cpp,所在的路径是\/home\/test\/test.cpp 你就在终端里输入:cd \/home\/test 然后输入g++ -o test test.cpp 就已经生成编译好的文件了。如果想看运行结果可以在终端输入 .\/test (还是在刚才的路径下输入)...
用linux编c++找不到g++总是出现这种情况,请大神们帮帮我吧
你没有安装gcc编译器,如果有光盘请挂载到系统上,用rpm命令安装gcc编译器
如何用虚拟机linux系统编写c++程序
1、使用vim\/gvim编辑器书写代码,保存为文件test.cpp 2、在命令行使用g++ -o Test test.cpp进行编译,生成Test可执行文件 3、.\/Test 运行该文件即可
linux下编写c++,include的那些头文件在什么地方
C\/C++程序在linux下被编译和连接时,GCC\/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。1、#include <stdio.h>,直接到系统指定目录去查找头文件。系统默认路径为:\/usr\/include,\/usr\/local\/include,\/usr\/lib\/gcc-lib\/i386-Linux\/2.95.2\/include(gcc库文件的路径,...
G++ 和 C++ 编译器编译出的程序 运行后内存使用不同 这是为什么?_百度...
内存分配,不同的编译器采用不同的方法,其速度,效率,内存大小都不一样。你搜一下malloc的算法。有一个大致的了解。关于头文件的问题,不同的编译器,对标准的实现有所不同,可以理解的。