当前位置: 首页 > news >正文

简单的GCC语法: 弄清gcc test.c 与 gcc -c test.c 的差别

简单的GCC语法:

如果你只有一个文件(或者只有几个文件),那么就可以不写Makefile文件(当然有Makefile更加方便),用gcc直接编译就行了。在这里我们只介绍几个我经常用的几个参数,第一是 “-o”,它后面的参数表示要输出的目标文件,再一个是 “-c”,表示仅编译(Compile),不连接(Make),如果没有”-c”参数,那么就表示连接,如下面的几个命令:

gcc –c test.c,表示只编译test.c文件,成功时输出目标文件test.o

gcc –c test.c –o test.o ,与上一条命令完全相同

gcc –o test test.o,将test.o连接成可执行的二进制文件test

gcc –o test test.c,将test.c编译并连接成可执行的二进制文件test

gcc test.c –o test,与上一条命令相同

gcc –c test1.c,只编译test1.c,成功时输出目标文件test1.o

gcc –c test2.c,只编译test2.c,成功时输出目标文件test2.o

gcc –o test test1.o test2.o,将test1.o和test2.o连接为可执行的二进制文件test

gcc –c test test1.c test2.c,将test1.o和test2.o编译并连接为可执行的二进制文件test

注:如果你想编译cpp文件,那么请用g++,否则会有类似如下莫名其妙的错误:

cc3r3i2U.o(.eh_frame+0x12): undefined reference to `__gxx_personality_v0’......

还有一个参数是”-l”参数,与之紧紧相连的是表示连接时所要的链接库,比如多线程,如果你使用了pthread_create函数,那么你就应该在编译语句的最后加上”-lpthread”,”-l”表示连接,”pthread”表示要连接的库,注意他们在这里要连在一起写,还有比如你使用了光标库curses,那么呢就应该在后面加上”-lcurses”,比如下面的写法:

gcc –o test test1.o test2.o –lpthread –lcurses

当然gcc的参数我感觉有几百个,不过我们平时在x86机器上用的就这么些,况且这里也不是GCC教程,所以,就此打住。

相关文章:

  • Windows下UltraEdit查看Objective-C代码高亮工具
  • 用ultraEdit打造自己的Objective-C IDE for Windows
  • 在项目中将数据导出为Excel格式时出现“检索COM 类工厂中CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败
  • ExtJS Grid 改变单元格背景颜色的方法
  • Connector/Net no longer supports server versions prior to 5.0
  • The current identity (JSTAM2\jstcrm) does not have write access to 'C:\WINDOWS\Microsoft.NET\Framewo
  • smtp服务器无法绑定实例1
  • 无法对 数据库'UDS' 执行 删除,因为它正用于复制
  • SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问
  • virtualbox安装增强功能:鼠标在主机与虚拟机之间自由切换
  • Linux 图形界面与命令行模式切换
  • MySql四舍五入
  • linux下用rpm 安装jdk
  • linux安装gcc和c++库
  • linux rm命令参数及用法详解---linux删除文件或目录命令
  • [case10]使用RSQL实现端到端的动态查询
  • co.js - 让异步代码同步化
  • HTML-表单
  • Linux中的硬链接与软链接
  • pdf文件如何在线转换为jpg图片
  • python 学习笔记 - Queue Pipes,进程间通讯
  • use Google search engine
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 如何合理的规划jvm性能调优
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 你对linux中grep命令知道多少?
  • #define,static,const,三种常量的区别
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (三)mysql_MYSQL(三)
  • (四)Linux Shell编程——输入输出重定向
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)scrum常见工具列表
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ../depcomp: line 571: exec: g++: not found
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .net core 6 集成和使用 mongodb
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .net中生成excel后调整宽度
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [BZOJ 4598][Sdoi2016]模式字符串
  • [C#7] 1.Tuples(元组)
  • [DL]深度学习_Feature Pyramid Network
  • [Java] 什么是IoC?什么是DI?它们的区别是什么?
  • [Linux]进程间通信(system V共享内存 | system V信号量)
  • [Linux]如何理解kernel、shell、bash
  • [NOIP 2015]Day.1 T2 信息传递 【最小环】