GCC命令

一. 常用编译命令选项

源程序test.c

1. 无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。

2. 选项 -o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。

3. 选项 -E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。

4. 选项 -S
用法:#gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。

6. 无选项链接
用法:#gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。

7. 选项-O
用法:#gcc -O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法

如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]

1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c   //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test

以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

3库文件连接

开发软件时,完全不使用第三方函数库的情况是比较少见的,通常来讲都需要借助许多函数库的支持才能够完成相应的功能。从程序员的角度看,函数库实际上就是一些头文件(.h)和库文件(so、或lib、dll)的集合。。虽然Linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件则放到/usr/lib/目录下;Windows所使用的库文件主要放在Visual Stido的目录下的include和lib,以及系统文件夹下。但也有的时候,我们要用的库不再这些目录下,所以GCC在编译时必须用自己的办法来查找所需要的头文件和库文件。

例如我们的程序test.c是在linux上使用c连接mysql,这个时候我们需要去mysql官网下载MySQL Connectors的C库,下载下来解压之后,有一个include文件夹,里面包含mysql connectors的头文件,还有一个lib文件夹,里面包含二进制so文件libmysqlclient.so

其中inclulde文件夹的路径是/usr/dev/mysql/include,lib文件夹是/usr/dev/mysql/lib

3.1编译成可执行文件

首先我们要进行编译test.c为目标文件,这个时候需要执行

gcc –c –I /usr/dev/mysql/include test.c –o test.o
3.2链接

最后我们把所有目标文件链接成可执行文件:

gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。

3.3强制链接时使用静态链接库

默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。

在/usr/dev/mysql/lib目录下有链接时所需要的库文件libmysqlclient.so和libmysqlclient.a,为了让GCC在链接时只用到静态链接库,可以使用下面的命令:

gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

 

静态库链接时搜索路径顺序:

1. ld会去找GCC命令中的参数-L
2. 再找gcc的环境变量LIBRARY_PATH
3. 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的

动态链接时、执行时搜索路径顺序:

1. 编译目标代码时指定的动态库搜索路径
2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
4. 默认的动态库搜索路径/lib
5. 默认的动态库搜索路径/usr/lib

有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径

转载于:https://www.cnblogs.com/vincentqliu/p/6548203.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572653.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5手机端三级联动城市选择代码,省市县三级联动(jQuery手机端收货地址选择地区代码)...

【实例简介】【实例截图】【核心代码】jQuery手机端收货地址选择代码 - 站长素材默认调用所在地区:设置默认值所在地区:/*** 默认调用*/!function () {var $target $(#J_Address);$target.citySelect();$target.on(click, function (event) {event.stop…

内连接、左外连接、右外连接、交叉连接区别

在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚。这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下。希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助。(发这么…

winform数据传递到html,C#下winform和JS的互相调用和传参(webbrowser)

不多说,直接上代码,winform下button1调用js函数,从html页面获取值,然后JS调用WINFORM的函数,传送获取到的值到winform并通过messagebox的方法show出来。一步到位, winform调用JS函数 和JS调用winform函数的…

xcode开发html5工具,5个Xcode开发调试技巧

1.Enable NSZombie Objects(开启僵尸对象)Enable NSZombie Objects可能是整个Xcode开发环境中最有用的调试技巧。这个技巧非常非常容易追踪到重复释放的问题。该技巧会以非常简洁的方式打印指出重复释放的类和该类的内存地址。怎么开启僵尸对象呢?首先打开“Edit Sc…

求1-n之内的素数

#include<stdio.h>#include<math.h>int main(){ int n,i,j,k; scanf("%d",&n); //输入范围n for(i2;i<n;i) { ksqrt(i); for(j2;j<sqrt(i);j) { if(i%j0){ //如果i…

计算机基础和操作系统基础知识测试,计算机基础知识和操作系统.doc

全国计算机等级考试精讲精解精练——二级C第1章 计算机基础知识与操作系统 PAGE 2 PAGE 33技术资料共享知识第1章计算机基础知识与操作系统大纲要求了解计算机的有关概念及软硬件系统的组成&#xff1b;了解数据基本单位&#xff0c;掌握计算机常用数制的转换方法&#xff1b;具…

Unity 协程深入解析与原理

先来直接放一段代码 1 using System.Collections;2 using System.Collections.Generic;3 using UnityEngine;4 5 public class CoroutineTest : MonoBehaviour6 {7 8 void Start()9 { 10 Debug.Log("Start Begin"); 11 12 CustomCoroutine …

计算机操作员初级 第1单元0202微型计算机基本操作 教学大纲,计算机操作员教学大纲...

计算机操作员培训教学大纲一、课程的地位、目的与任务计算机应用基础课程是计算机操作员必修课。通过学习&#xff0c;测试学员的计算机基础知识&#xff0c;基本操作和使用计算机的能力&#xff1b;它是学员学习计算机的入门课程&#xff0c;提高学员的综合学习的能力。二、教…

晓庄学院计算机科学分数,南京晓庄学院计算机单招分数

技校网专门为您推荐的类似问题答案问题1&#xff1a;南京晓庄学院的计算机专业晓庄排名太低计算机实力也弱 你的分这么高 上了浪费 建议上南京林业大学或其它符合等级的外省一流学校问题2&#xff1a;有南京晓庄学院 行知学院 计算机专业的学生吗, 这个学校如何你好啊&#xff…

NAT协议详解

NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是将IP数据报头中的IP地址转换为另一个IP地址的过程。在实际应用中&#xff0c;NAT主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公网IP地址代表较多的私网IP地址的方式&#x…

[Design-Pattern]工厂模式

Java版本 1 package interfaces;2 3 interface Service {4 void method1();5 void method2();6 } 7 8 interface ServiceFactory { 9 Service getService(); 10 } 11 12 class Implementation1 implements Service { 13 Implementation1() {} 14 public void method1…

计算机应用基础文字处理软件应用职高PPT,《计算机应用基础》职高2010修订版_教(学)案...

《计算机应用基础》职高2010修订版_教(学)案 (93页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;39.9 积分&#xfeff;. .《计算机应用基础》职高2010修订版 教案第一章 计算机基础知识第二章 中文…

快速排序【记录一下代码】

本文仅用作学习记录&#xff0c;大神勿喷O(∩_∩)O~ 代码一、百度百科C语言版本代码,参考数据结构p274(清华大学出版社&#xff0c;严蔚敏) 1 void Qsort1(int a[], int low, int high)//百度百科C语言版本代码 2 {/*参考数据结构p274(清华大学出版社&#xff0c;严蔚敏)*/3 …

计算机图学测试题及答案,《计算机图形学》练习测试题及参考答案

A 29、下列有关平面几何投影的叙述语句中&#xff0c;正确的论述为( ) A) 在平面几何投影中&#xff0c;若投影中心移到距离投影面无穷远处&#xff0c;则成为平行投影&#xff1b; B) 透视投影与平行投影相比&#xff0c;视觉效果更有真实感&#xff0c;而且能真实地反映物体的…

eclipse 修改java代码不重启服务器 生效配置

1.本文目的&#xff1a;用tomcat进行web开发时&#xff0c;修改Java代码往往要重启代码&#xff0c;当工程较大启动较慢时&#xff0c;严重影响效率&#xff0c;本文通过eclipse下tomcat开发和发布web程序时&#xff0c;对一些Java代码一般修改&#xff08;不是增减方法、变量&…

多媒体微型计算机必不可少的硬件,第1章计算机基础知识习题材料.doc

第三部分 习 题第1章1计算机基础知识一、单项选择题1&#xff0e;通常人们普遍使用的电子计算机是( )。A&#xff0e;数字电子计算机B&#xff0e;模拟电子计算机C&#xff0e;数字模拟混合电子计算机D&#xff0e;以上都不对2&#xff0e;世界上第一台电子计算机研制成功的时间…

Shell第二篇:正则表达式和文本处理工具

一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起&#xff08;称为正则表达式&#xff09;来描述字符或者字符串的方法。或者说&#xff1a;正则就是用来描述一类事物的规则。 生活中处处都是正则&#xff1a; 比如我们描述&#xff1a;4条腿 你可能会想到的是四条腿…

计算机二级办公软件高级应用难不难,计算机二级office难吗 考试内容是什么

相信很多的在校大学生或者已经开始工作的小伙伴都会有考虑过要考国二MsOffice高级应用考试&#xff0c;那么&#xff0c;计算机二级office难吗&#xff1f;考试内容是什么&#xff1f;计算机二级office难吗许多考生基础差&#xff0c;考生缺乏备考计划&#xff0c;超过70%的考生…

vue.js指令v-model实现方法

原文链接&#xff1a;http://www.jb51.net/article/99097.htm V-MODEL 是VUE 的一个指令&#xff0c;在input 控件上使用时&#xff0c;可以实现双向绑定。 通过看文档&#xff0c;发现他不过是一个语法糖。 实际是通过下面的代码来实现的&#xff1a; <% page language&quo…

山西财大华商学院计算机系,山西财经大学华商学院

山西财经大学华商学院&#xff0c;位于山西省太原市&#xff0c;是经国家教育部正式批准设立&#xff0c;由山西财经大学在2002年举办的一所全日制本科院校&#xff0c;学院紧邻山西财经大学主校区&#xff0c;目前在校学生4500余人。山西财经大学是新中国成立后建校最早的财经…