在终端中输入 gcc 文件名 -o 目标文件名
然后 ./目标文件名 就行了,没有目标文件名,自动存为 a
执行 ./a 就行了。
在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶
A)#include <myinc.h>
B)#include “myinc.h”
其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。
GCC执行过程示例
示例代码 a.c:
#include <stdio.h>
int main()
{
printf("hello\n");
}
预编译过程:
这个过程处理宏定义和include,并做语法检查。
可以看到预编译后,代码从5行扩展到了910行。
gcc -E a.c -o a.i
cat a.c | wc -l
5
cat a.i | wc -l
910
编译过程:
这个阶段,生成汇编代码。
gcc -S a.i -o a.s
cat a.s | wc -l
59
汇编过程:
这个阶段,生成目标代码。
此过程生成ELF格式的目标代码。
gcc -c a.s -o a.o
file a.o
a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
链接过程:
链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
gcc a.o -o a
程序运行:
./a
hello
编辑本段
GCC编译简单例子
编写如下代码:
#include <stdio.h>
int main()
{
printf("hello,world!\n");
}
执行情况如下:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.c -o hello
./hello
hello,world!
② 在Linux下如何使用GCC编译程序、简单生成 静态库及动态库
一个程序调用了一个动态库,但是两者之间有函数重名,导致运行时动态库中的Linux下动态库文件的扩展名为这样,线程函数库被称作libthread.so。静态库的
③ 怎么在命令行里用gcc去编译连接一个程序
你的说法本身就有问题,gcc编译的时候只能去链接 其他依赖文件和库(静态库/动态库)
动态库:.so结尾,在运行时加载。
静态库:.a结尾,在编译时加载。
例如编译hello.c 输出hello可执行文件
链接静态库:
gcc hello.c -L /home/lib -static -l mylib -o hello
-L参数可以向gcc的库文件搜索路径中添加新目录
-static选项强制使用静态链接库
-l mylib -l后面是要静态连接的库(libhellos.a)
链接动态库:
gcc -o hello hello.c -L. -lhello
-L后面的点为当前目录
-lhello 是去链接libhello.so
④ gcc编译流程
gcc编译分为四部;
第一步,预编译,将程序中的宏定义等预编译;
第二步,编译,将*.h,*.c等文件编译成为*.o文件;
第三步,汇编;
第四步,连接,将*.o文件连接库,生成可执行文件!
⑤ 的程序在Gcc下怎么编译
关于 C 语言源程序,最简单的使用方式就是:gcc my_program.c <cr>,如果没有程序错误的话,gcc 编译器会生成一个缺省的可执行程序:a.out 。
常用的有:gcc -o my_runfile my_program.c <cr>
使用 my_runfile 运行文件名代替缺省的可执行程序 a.out
gcc -c my_program.c <cr>
只编译,不连接。生成一个 my_program.o 的文件。
如果还需要更多的选项,那就需要查看 gcc 的编译选项了。当然了,如果程序的规模再要大的话,那就需要编写 makefile 文件,以及 make 工具对 makefile 进行管理了。
⑥ 为什么我手机已经安装了GCC,c4droid还是要让我安装GCC呢,而且一直还编译不了代码,SDL
是不是你安装的不支持你的手机呐?你去找适合你的手机的不就行了
⑦ linux系统下SDL的应用
SDL库主要在游戏、多媒体等应用上使用。
GTK,QT是GUI库。
两者的应用方向是不一样的。
当然,软件这种东西,没有不可能,只有想不到。技术上,使用SDL库,当然也可以开发桌面系统。但是这有点像拿治感冒的药,来解决失眠问题。虽然,你可能也会困,但是不如直接吃安眠药来的快:)
同样道理,GTK,QT更适合于开发GUI。用这些库画窗口,画对话框,进度条什么的控件,会比较方便。道理类似于,你在Windows中使用MFC,1分钟就能出来一个支持窗口界面来:)这要比自己,一个矩形一个矩形画,要方便多了吧?
另外,Qt, GTK是基于X系统的Xlib库的,这也是一些历史原因吧。因为,我们目前使用的桌面系统基本都是基于X系统的。
另外,说的那个插件没有用过。你可以说下那个3D插件的名字,咱们可以一起探讨下。
我估计那个3D插件应该只是对一些底层函数库的进一步封装而已,让你更方便的制作出比较炫的效果出来。
另外,OpenGL主要用于3D加速,目前的X系统对这部分支持的也算不错了。
⑧ gcc编译程序时怎么连接.lds
有两种使用方法:
1,lds作为外置脚本,参与对gcc链接过程的控制。使用方法为
gcc XXX.c XX.lds。
gcc能够自动识别你的文件列中后缀不能识别的文件,作为链接脚本使用。这样编译出来的程序,还是要使用gcc默认的lds脚本,你的脚本只是一个辅助。
2,lds代替系统的脚本。
这种要先使用gcc -c参数编译你的源程序,编译出来的.o文件,使用命令ld -T来指定lds文件链接到一起。
⑨ 有没装好GCC for droid和SDL的C4droid吖他丫的,我装了好多次,可是一点效果也
自己网络"GCC_SDL_FOR-C4droid"跳出有直接下载两个最新插件(GCC。。。SDL。。)的地
址,在该页面也有下载c4droid主程序的下载链接。下载后先安装插件,成功后安装主程序,插件会自动解压,解压时自动弹出一个窗口,点击yes就OK了,自动把插件数据解压到主程序了。编写程宇时在菜单/preference/setting complied/G ,编译C ,当然也可能会因为手机不一样,有些最新版本运行不了,或者是GCC和SDL只能有一个正常,也或者c4可用,但两个插件用不了,这样换旧的插件版本试一下,因为现在网上比较乱,有些软件是大神改的,又或者手机原因,自己找吧,一般安卓手机都可以用的!