↓ 跳过正文
  1. Posts/

g++ 编译多个源文件(转载)

·1369 字·3 分钟

参考资料

一. 常用编译命令选项 假设源程序文件名为test.c。

  1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

  2. 选项 -o 用法:#gcc test.c -o test 作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

  3. 选项 -E 用法:#gcc -E test.c -o test.i 作用:将test.c预处理输出test.i文件。

  4. 选项 -S 用法:#gcc -S test.i 作用:将预处理输出文件test.i汇编成test.s文件。

  5. 选项 -c 用法:#gcc -c test.s 作用:将汇编输出文件test.s编译输出test.o文件。

  6. 无选项链接 用法:#gcc test.o -o test 作用:将编译输出文件test.o链接成最终可执行文件test。

  7. 选项-O 用法:#gcc -O1 test.c -o test 作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法: [假设有两个源文件为test.c和testfun.c]

  1. 多个文件一起编译 **用法:#gcc testfun.c test.c -o test ** 作用:将testfun.c和test.c分别编译后链接成test可执行文件。

**2. 分别编译各个源文件,之后对编译后输出的目标文件链接。 ** **用法: ** **#gcc -c testfun.c //将testfun.c编译成testfun.o ** **#gcc -c test.c //将test.c编译成test.o ** #gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

  1. 如果要编译的文件都在同一个目录下,可以用通配符gcc *.c -o 来进行编译。

你是否会问,如果是一个项目的话,可能会有上百个文件,这样的编译法,人不是要累死在电脑前吗,或者等到你编译成功了,岂不是头发都白了,呵呵,所以我们要把上述的编译过程写进以下一个文本文件中: Linux下称之为makefile #这里可以写一些文件的说明 MyFirst: MyFirst.o hello.o g++ MyFirst.o hello.o -o MyFirst Hello.o:Hello.cpp g++ -c Hello.cpp -o Hello.o MyFirst.o:MyFirst.cpp g++ -c MyFirst.cpp -o MyFirst.o makefile 编写规则: (1)以“#”开始的行为注释 (2)文件依赖关系为: target:components rule 存盘为MyFirst,在终端输入:make MyFist,程序出现了错误可是所有程序员共同的敌人,在编写程序时我们应该尽量的去避免错误的出现,不过编写的时候再怎么都不可避免的出现这样那样的错误,对程序 进行必要的调试是一个好主意,那我们怎么来调试程序呢,看下面: gdb ./文件名 ////////////////在这里我修改下要想下面可以调试,在上面编译的 时候必须加上参数g,g++ -g hello.cpp -o hello 以下为调试状态下的可以用到的命令(可以仅输入单词的输入,如break可简为b),尖括号中为说明 list <显示源代码> break 行号 <设置断点> run <运行程序> continue <继续从断点处执行> print 变量 <调试时查看变量的值> del 行号 <删除断点> step <单步执行,可跟踪到函数内部> next <单步执行,不可跟踪到函数内部> quit <退出> makefile 的编写不是件容易的事情,因为自己写的makefile可能不能在所有的unix/linux类操作系统下通用。因此在很多项目中都用automake.autoconf或者是Cmake等工具。

相关文章

qt 5.x 学习笔记 (2)

·3095 字·7 分钟
先来放一波过程中用到的资料和官方文档好了。 basic layout_qt5.8 QBoxLayout Class_qt5.8 QString Class 5.8 QChar Class qt 5.8 Standard Dialogs Example qt 5.8 更新的部分还是放在最前面好了。 convert from QString to char *的时候有个坑。 In order to convert a QString to a char*, then you first need to get a latin1 representation of the string by calling toLatin1() on it which will return a QByteArray. Then call data() on the QByteArray to get a pointer to the data stored in the byte array. See the documentation: See the following example for a demonstration:

qt 5.x 初探(1)

·477 字·1 分钟
嘛。。为了系统安全课来学一波qt… 现在算是写出了一个可以打开文件,保存文件的记事本。 接下来要搞定的事情是,如何写一个自定义的事件?比如计算个开方之类的。

ubuntu 包管理(apt-get)损坏的解决办法

·287 字·1 分钟
症状是不管安装什么,都会说有一大堆依赖无法安装。。。 大概是: a depends b[i],but b[i] is not be installed. (b==0..n) 最后会提示Unable to correct problems, you have held broken packages 解决办法:用synaptic工具,把可能存在问题的包都清除掉。

install galliumOS on chromebook with chrx

·538 字·2 分钟
我的chromebook 是 samsung 3 查阅Hardware Compatibility 可以知道我的cb支持 gallium,对应的cpu 是Intel Braswell 然后去galliumos 官网 下载相应版本。 (发现这种做法并不需要自己下载。。。) 安装 galliumOS大体有两种方法,一种是完全去掉chromeOS,这种方法需要拆机去除写保护。。。我嫌麻烦。。。于是打算另一种,使用chrx 

murmurhash源码分析

·2165 字·5 分钟
分析 levelDB 源码的时候遇到的,发现是一个广泛应用的 hash 算法,而且是纯 C 写的,于是找来了源码看。 MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。[1][2][3]由Austin Appleby在2008年发明,[4][5] 并出现了多个变种,[6] 都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。[7]