您的位置:首页 > 运维架构 > Linux

读《New Riders - Advanced Linux Programming.chm》笔记1(未完)

2006-04-14 11:40 411 查看
c++的头文件

#ifdef __cplusplus
extern "C" {
#endif
 
extern double reciprocal (int i);
 
#ifdef __cplusplus
}
#endif
3,gcc -c **.c 编译一个c文件,生成.o
 
   g++ -c  **.cpp 告诉编译器只编译为一个目标文件.o,如果没有-c,编译器会连接其他目标文件生成可执行文件
4,./  ../
5,用-I来指定头文件的位置,(默认的话编译器会去找当前目录和标准库目录)
  % g++ -c -I ../include reciprocal.cpp
6, 优化代码
  % g++ -c -O2 reciprocal.cpp
7,得到gcc的帮助
  info gcc
8,连接两个目标文件
  % g++ -o reciprocal main.o reciprocal.o
  连接了两个目标文件生成了reciprocal执行文件
  % ./reciprocal 7 //执行(int main (int argc, char **argv) 这样的主函数就可以知道要输入参数了吗,实验一下<暂时的见解:运行程序:reciprocal 7,则argc为2,argv[0]为reciprocal,argv[1]为7>)
   The reciprocal of 7 is 0.142857 //系统返回消息
  连接两个目标文件和库文件   -l
  % g++ -o reciprocal main.o reciprocal.o -lpam//这里的-l不和pam分开的吗,pam会自动加上lib前缀和.a后缀,
  那就是说库文件是以.a为后缀
  % g++ -o reciprocal main.o reciprocal.o -L/usr/local/lib/pam -lpam//当库文件不是默认目录时

9,自动编译
   建一个makefile文件
   reciprocal: main.o reciprocal.o //要编译的目标
        g++ $(CFLAGS) -o reciprocal main.o reciprocal.o //编译规则(这个里要有tab空格,如果在emacs写会自动加上), $(CFLAGS)
  为变量,可以给他付值
   main.o: main.c reciprocal.hpp
        gcc $(CFLAGS) -c main.c
 
   reciprocal.o: reciprocal.cpp reciprocal.hpp
        g++ $(CFLAGS) -c reciprocal.cpp
 
   clean: //当调用% make clean时执行
        rm -f *.o reciprocal
   运行make命令
   当%make时,执行除clean的目标
   % make clean 执行clean目标.
   当重编译时,只编译源文件有修改的目标
   给make文件变量付值
   % make clean
   rm -f *.o reciprocal
   % make CFLAGS=-O2
   gcc -O2 -c main.c
   g++ -O2 -c reciprocal.cpp
   g++ -O2 -o reciprocal main.o reciprocal.o
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息