Linux gcc使用基础
gcc 编译器是 Linux 下默认的 C/C++ 编译器,大部分 Linux 发行版中都是默认安装的。gcc 编译器通常以 Linux 命令的形式在终端(Shell/Bash)中使用。
单一源文件
最基础用法
hello.c代码如下:
#include <stdio.h>
int main(void)
{
printf("Hello World!n");
}
使用gcc编译:
gcc hello.c
使用ls命令查看当前目录,多出一个a.out可执行文件,运行:
./a.out
Hello World!
注意:gcc编译源码,不加任何参数时,生成的可执行性文件默认为a.out,并且没有中间过程的目标文件。
生成目标文件&自定义名称
使用-c参数可以生成.o结尾的目标文件:
gcc -c hello.c
使用ls命令查看当前目录,多出一个hello.o目标文件。
继续使用-o参数生成可执行文件,并自定义名称:
gcc -o hello hello.o
其中 “hello” 是指定生成的可执行文件的名称,可以执行测试:
./hello
Hello World
多个源文件
当存在多个源文件,并且文件间存在依赖关系时,必须要先生成各自的目标文件,再链接成可执行文件。
thank.c源码如下:
#include <stdio.h>
int main(void)
{
printf("Hello Worldn");
thanks_2();
}
thank_2.c源码如下:
#include <stdio.h>
void thanks_2(void)
{
printf("Thank you!n");
}
注意到thanks.c需要用到thanks_2.c中的函数,先编译:
gcc -c thanks.c thanks_2.c
编译成功后会生成thanks.o和thanks_2.o目标文件,继续链接:
gcc -o thanks thanks.o thanks_2.o
执行生成的thanks可执行文件:
./thanks
Hello world
Thank you!
注意:编译阶段可以添加-O参数进行程序优化,或是-Wall参数显示详细的编译信息,如:
gcc -O -c thanks.c thanks_2.c
gcc -Wall -c thanks.c thanks_2.c
调用外部函数库
sintest.c代码如下:
#include <stdio.h>
#include <math.h>
int main(void)
{
float value;
value = sin(3.14/2);// 即pai/2 = 90°
}
函数中用到了sin三角函数,包含了math.h数学库,因而在编译阶段需要连接对应的数学库。
gcc sintest.c -lm -L/lib -L/usr/lib
其中,-lm可理解为两部分,-l是加入某个函数库,m则是libm.so的代称。
后面的-L参数用于指定库的搜索路径,由于Linux的默认库的位置就是在lib文件目录下,因此可以省略不写,如果是其它的第三方库,则需要指明库文件的位置。
另外,对于第三方的头文件,也许指明头文件的路径,比如stdio.h这个文件,如果它不是系统认识的文件,则在编译时需要通过-I参数知名位置:
gcc sintest.c -lm -I/usr/include
参考:《鸟哥的Linux私房菜 (基础学习篇 第三版)》
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux上传并配置jdk和tomcat的教程详解
- Android SQLite事务处理结合Listview列表显示功能示例
- Android开发之如何自定义数字键盘详解
- 在Android上实现HttpServer的示例代码
- Linux /etc/network/interfaces配置接口方法
- Android中Service和Activity相互通信示例代码
- Android编程实现定时发短信功能示例
- Android实现新浪微博一键分享的实例代码
- Android实现常见的验证码输入框实例代码
- Android实现加载状态视图切换效果
- Retrofit + OkHttp缓存处理的示例代码
- Android图片实现压缩处理的实例代码
- Windows10安装linux子系统的两种方式(图文详解)
- Android 图片处理避免出现oom的方法详解
- session登陆成功第四篇4