最近有项目用到在linux上使用gcc编译c源程序的工作,于是针对这块做了一些整理,列出
使用gcc在linux下编译c的一些最基础指令
gcc -[command] c文件名称 -o 生成文件别名
command(指令)--
W----(warning警告)
例如: gcc -Wall hello.c -o hello
-version (查看当前gcc版本)
例如:gcc --version
gcc -help(查看帮助)
例如:gcc --help
gcc -Wall file1 file2 ... -o outfilename (gcc 编译多个文件)
注:头文件是不需要进行编译的
例如:gcc -Wall one.c two.c three.c -o liujun
linux 系统头文件一般放在/usr/include 或者是 /usr/local/include
include<> 与 include "" 区别是
include "" 是现在当前目录下查找对应的包含文件,如果没有才会到系统目录去查找对应的头文件
include <> 是直接到系统目录下去查找对应的头文件,不会在当前目录查找头文件
gcc -v filename 显示出gcc编译以及链接的所有信息
例如: gcc -Wall -v hello.c -o hello
gcc -c filename 将当前文件编译成一个目标文件(但不连接)
例如 gcc -Wall -c hello.c (生成一个以扩展名为.o的目标文件)
gcc filename.o filename1.o -o targetFile 将生成的目标文件进行合并成一个可执行文件
例如:gcc one.o two.o -o hello
linux 标准库路径 /usr/lib and /lib
gcc -Wall filename.c /path/file.a -o targetfilename.o 链接编译外部库
例如: gcc -Wall main.c /usr/lib/libm.a -o calc
1.gcc -Wall main.c /usr/lib/libm.a -o calc
2.gcc -Wall main.c -lm -o calc
注:第二个命令与第一句的文件名是相同的,使用 -l 表明当前文件是一个库文件
且是以lib为前戳的。
gcc -I path 告诉编译器在指定的path目录下查找头文件
例如: gcc -Wall main.c -I/usr/opt
gcc -L path 告诉编译器在指定的path目录下查找库文件
ar cr libname.a file1.o file2.o file3.o ... filen.o
将单独的目标文件(.o)文件 整合成一个库文件(名字叫libname.a),一般程序
在与库文件进行结合调用使用
例如: ar cr libhello.a fun1.o fun2.o
ar t libname.a 查看当前libname.a库中由多少个目标文件生成
gcc -Wall main.c libname.a(o) -o hello 将一个目标文件与一个库文件
编译生成一个库文件(顺序必须先写调用文件在写库文件)
gcc -Wall main.c -L/usr/opt -lhello -o liujun 在/usr/opt目录
下查找文件名是libhello.a的库文件
共享库默认加载库目录
/usr/local/lib 和 /usr/lib 设置LD_LIBRARY_PATH改变共享加载库路径
gcc -Wall -ansi hello.c -o hello (-ansi 使用标准的c进行编译)
gcc -Wall -DTEST hello.c -o hello (-D 相当于在程序中的#define TEST)
cpp -dM /dev/null (查看gcc中系统内置定义的宏)
编译程序需要执行四个步骤:
1.预编译:
cpp main.c > main.i (将文件main.c文件中包含的头文件的内容加载进当前
main.i这个文件当中,这就是预编译阶段)
2.编译转化为汇编语言
gcc -Wall -S main.c (将文件 main.c文件中的内容转化成汇编语言)
3.生成目标文件
as main.s -o main.o
4.链接目标文件到一个可执行文件(包含链接系统头文件库,程序中使用到的静态库或者动态库)
gcc main.o
file file.o 查看文件信息
ldd main 查看可执行文件main所依赖的库(main文件必须是可执行文件)
分享到:
相关推荐
linux操作系统下C语言编程入门 gcc编译 gdb调试技术 实例演示
介绍了gcc编译器中-o、-c、-Wall等常用选项(参数)的用法,并结合一个实例,详细介绍了gcc编译多个文件生成可执行文件的过程。
1. 什么是gcc? gcc的全称是GNU Compiler Collection,它是一个能够编译多种语言的编译器。...而gcc编译出来的程序能够在其他平台进行运行。例如嵌入式程序可在x86上编译,然后在arm上运行。
介绍了linux下的编译器gcc的基本原理,以及嵌入式汇编编译的过程
2.3.2 gcc编译流程分析 42 2.3.3 gcc警告提示 45 2.3.4 gcc使用库函数 47 2.3.5 gcc代码优化 49 2.4 嵌入式linux调试器gdb的使用 49 2.4.1 gdb使用实例 50 2.4.2 设置/删除断点 53 2.4.3 数据...
Linux-基础入门-学习笔记(2):交叉编译工具链与Makefile 一、安装交叉编译工具链 1. windows和linux下装软件的特点 windows下装软件的特点 Windows中装软件使用安装包,安装包解压后有2种情况:一种是一个安装文件...
红联Linux门户|Linux通用技术|Linux发行版技术|Linux企业应用|Linux实验室|红联Linux论坛Linux系统教程Linux入门Linux
第一阶段 Linux快速入门掌握Linux的常用操作命令 第一讲 Linux介绍 知识点1: Linux发展简史与黑客文化 知识点2: 安装Linux系统, 以Ubuntu虚拟机为例 知识点3: 购买Linux云主机,以阿里云主机为例 知识点4: Linux...
GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。本文将告诉读者如何下载并按照GCC。
3.1.2 Linux下C语言编程环境概述 3.2 常用编辑器 3.2.1 进入vi 3.2.2 初探emacs 3.3 gcc编译器 3.3.1 gcc编译流程解析 3.3.2 gcc编译选项分析 3.4 gdb调试器 3.4.1 gdb使用流程 3.4.2 gdb基本命令 3.5 make工程管理...
linux系统入门学习 教程简介 Linux应用系统开发及系统调试视频教程共75讲,主要讲解了GNU开发环境基础、Linux高级程序、Linux进程管理、进程间通信、线程、网络编程、HTTP原理、Socket内 核跟踪等内容,全套教程...
3.1.2 Linux下C语言编程环境概述 62 3.2 进入Vi 63 3.2.1 Vi的模式 63 3.2.2 Vi的基本流程 63 3.2.3 Vi的各模式功能键 65 3.3 初探Emacs 66 3.3.1 Emacs的基本操作 67 3.3.2 Emacs的编译概述...
对于想要快速入门GCC,或者想使用GCC进行一些简单的编译的话,这个文档很恰当。
obj-m := hello.o 代表了我们要构造的模块名为hell.ko,make 会在该目录下自动找到hell.c文件进行编译。如果 hello.o是由其他的源文件生成(比如file1.c和file2.c)的,则在下面加上(注意红色字体的对应关系): ...
绝对原创,参考李亚锋老师的ARM嵌入式Linux系统开发从入门到精通这本书,但是书中有很多错误,而且写得不够详细,这个是绝对详细,每一步骤都有截图,不会linux的也能够建立起arm 开发环境。
实际中会发现编译是可以通过的,但是不能使用,gdb跟踪发现port被赋值0,后看sin_port类型可以看到是short int型,因此这句应改为: serv_addr.sin_port = htons(LISTEN_PORT); 编译: gcc -o echo echo.c 后运行:...
1.Linux操作系统结构;常用的Linux Shell命令 2.开发环境使用 3.编译器GCC使用 4.实验:设置编译环境;
gcc -o 1 1.c //将1.c编译成.exe文件,我们可以用此命编译出代码。 8.chmod 命令 权限修改 用法:chmod 一位8进制数 filename。 eg: chmod u+x filenmame //只想给自己运行,别人只能读 //u表示文件主人, g 表示...
交叉编译工具链:atm-linux-gcc 4.3.2 qt版本:QtEmbedded-4.5.2-arm 我最近在Tiny6410进行摄像头的编程时,从网上找了大量的资料进行了学习,可是效果并不好,因为网上的资料大部分都不是很详细,假如给有过V4L2...