gcc使用整理(2)
来源:互联网 发布:java程序员培训价格 编辑:程序博客网 时间:2024/05/18 07:15
GCC和G++的区别
误区一:gcc只能编译c代码,g++只能编译c++代码。
两者都可以。但是请注意:
1. 后缀为.c的,gcc把它当作C语言,而g++当作是C++程序。后缀为.cpp的一样当成C++。
2. 编译阶段,g++会调用gcc,对于c++代码,两者是等价的。但是因为gcc命令不能自动和C++程序使用的库链接,所以通常用g++完成链接。为了统一,干脆用g++。
误区四:extern "C"与gcc、g++有关系
实际上并无关系,都是以C的命名方式来为symbol命名。
编译简单的C程序
假定代码存为“hello.c”,要用gcc编译该文件,使用下面的命令:
gcc -g -Wall hello.c -o hello
该命令将文件hello.c中的代码编译为机器码并存储在可执行文件hello中。机器码的文件名是通过-o选项指定的。选项-Wall开启编译器几乎所有常用的警告。选项-g表示在生成的目标文件中带调试信息。
编译多个源文件
例子将程序helloworld分割成三个文件hello.c、hello_fn.c、hello.h。要用gcc编译以上源文件,使用下面的命令:
gcc -Wall hello.c hello_fn.c -o newhello
注意到头文件hello.h并未在命令行中指定,源文件中的#include "hello.h"使得编译器自动将其包含到合适的位置。
简单的makefile文件
make从makefile中读取项目的描述,指定了一系列目标和依赖的编译规则。下面是上一节项目的简单的makefile:
CC=gcc
CFLAGS=-Wall
hello: hello.o hello_fn.o
clean:
rm -f hello hello.o hello_fn.o
链接外部库
库是预编译的目标文件的集合,它们可以被链接进程序。静态库以后缀.a的存档文件。标准系统库可在目录/usr/lib与/lib中找到。
比如,在类Unix系统中,C语言的数学库一般存储为文件/usr/lib/libm.a。该库中函数的原型声明在头文件/usr/include/math.h中。
在一个调用数学库libm.a中sin函数的例子,尝试单独从该文件生成一个可执行文件将导致一个链接阶段的错误。函数sin未在本程序中定义也不在默认库libc.a中。为使编译器能将sin链接进主程序,我们需要提供数学库libm.a,一个容易想到但比较麻烦的做法是在命令行中显式地指定它 gcc -Wall calc.c /usr/lib/libm.a -o calc。为了避免在命令行中指定长长的路径,编译器为链接函数库提供了快捷的选项-l。例如 gcc -Wall calc.c -lm -o calc。与我们上面指定库全路径的命令等价。一般,-lNAME使链接器尝试链接系统库目录中的函数库文件libNAME.a。
- gcc使用整理(2)
- gcc使用整理(1)
- GCC参数解释(整理)
- arm gcc工具链使用整理
- 常见gcc 编译错误整理(开始)
- 常见gcc编译警告整理(开始)
- 常见gcc编译警告整理(开始)
- 常见gcc编译警告整理(开始)
- 常见gcc编译警告整理(开始)
- 常见gcc编译警告整理(开始)
- GCC使用入门(一)(2)
- GCC使用详解(2)
- GCC使用指南(整理)
- GCC命令选项(整理)
- gcc gdb 整理
- gcc编译错误整理
- GCC 常见错误整理
- GCC知识整理
- java中将字符串转换成日期类型
- Android中Bitmap类getPixel方法获取的像素值为负
- ubuntu安装oracle unzip: No such file or directory
- 新JS四舍五入保留两位小数
- 关于Bitmap像素颜色的判断
- gcc使用整理(2)
- SQL SERVER临时表的使用
- Java中 每个类在没有声明构造方法的前提下,会自动生成一个不带参数的构造方法
- SEH
- 看看baidu是如何AJAX跨域的
- 实际开发中体会到的技巧(连载)
- android 浏览器插件开发 - HelloPlugin
- 用img标签实现数据提交
- jetspeed2中的portlet开发