linux c、c++的编译链接运行
来源:互联网 发布:nb iot 知乎 编辑:程序博客网 时间:2024/05/17 04:14
GCCLinux下使用最广泛的C/C++编译器是GCC,大多数的Linux发行版本都默认安装,不管是开发人员还是初学者,一般都将GCC作为Linux下首选的编译工具。本教程毫不犹豫地使用GCC来编译C程序。
保存文件后退出,打开终端并 cd 到当前目录,输入下面的命令:
gcc test.c -o test
可以直接将C代码编译链接为可执行文件。
可以看到在当前目录下多出一个文件 test,这就是可执行文件。不像Windows,Linux不以文件后缀来区分可执行文件,Linux下的可执行文件后缀理论上是可以任意更改的。
当然,也可以分步编译:
1) 预处理
gcc -E test.c -o test.i
在当前目录下会多出一个预处理结果文件 test.i,打开 test.i 可以看到,在 test.c 的基础上把stdio.h和stdlib.h的内容插进去了。
2) 编译为汇编代码
gcc -S test.i -o test.s
其中-S参数是在编译完成后退出,-o为指定文件名。
3) 汇编为目标文件
gcc -c test.s -o test.o
.o就是目标文件。目标文件与可执行文件类似,都是机器能够识别的可执行代码,但是由于还没有链接,结构会稍有不同。
3) 链接并生成可执行文件
gcc test.o -o test
如果有多个源文件,可以这样来编译:
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test
注意:如果不指定文件名,GCC会生成名为a.out的文件,.out文件只是为了区分编译后的文件,Linux下并没有标准的可执行文件后缀名,一般可执行文件都没有后缀名。
编译后生成的test文件就是程序了,运行它:
./test
如果没有运行权限,可以使用sudo命令来增加权限(注意要在Linux的分区下):
sudo cdmod test 777
对于程序的检错,我们可以用-pedantic、-Wall、-Werror选项:
-pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码(并不是全部);
-Wall可以让gcc显示警告信息;
-Werror可以让gcc在编译中遇到错误时停止继续。
这3个选项都是非常有用的。
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
#include
int factorial (int n)
{
if (n <= 1)
return 1;
else
return factorial (n - 1) * n;
}
清单 main.c
#include
#include
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;
}
利用如下的命令可编译生成可执行文件,并执行程序:
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
void main (void)
{
cout << “Hello, world!” << endl;
}
则可以如下调用 g++ 命令编译、连接并生成可执行文件:
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#
转自:http://www.ha97.com/2830.html
http://blog.sina.com.cn/s/blog_62d79a0b0100rab8.html
- linux c、c++的编译链接运行
- linux C 语言入门 编译链接运行
- 【基础知识】linux c 编译链接运行、动态链接库
- Linux下C的编译和链接
- Linux下C的编译和链接
- linux下C程序的编译链接
- 第一个C程序-编译、链接、运行
- c程序从编译链接到运行
- linux编译运行C程序
- c 程序的编译链接
- C的编译链接过程
- 【Linux/C】程序的编译和链接--例子
- linux学习笔记一, c语言程序的编译链接
- linux C编程入门之静态链接库、动态链接库的编译与链接
- linux下编译运行的第一个C
- linux下编译运行的第一个C
- linux下c语言的编译调试运行
- Linux c编译,运行遇到的问题总结
- C语言提高班学习笔记 lesson1 自定义数据类型
- Java的类型转换
- JavaScript中作用域链和闭包
- angular-cli 暂停时出现端口占用的问题[已解决]
- Qualcomm平台camera调试移植入门
- linux c、c++的编译链接运行
- 1508-张晨曦总结《2016年-11月-11日》【连续21天总结】
- HRegionServer无法启动,启动hbase后马上挂掉的问题
- Java中类和方法修饰符
- host is not allowed to connect to this mysql
- MySQL如何优化
- Vlc-for-android源码分析
- "Chrome浏览器下载Word、Excel、PPT,打开提示错误"问题
- 浮点数量化2^n定点数