GCC编译C代码
C程序的编译过程

常用文件的后缀名:

gcc编译c代码
1、gcc 常用编译选项:


2、gcc编译方法
testc.c:
#include <stdio.h>
int main()
{
printf("HELLO WORLD!");
system("pause");
;
}
1)一步到位编译为可执行exe程序:
gcc testc.c ---生成a.exe
gcc testc.c -o testc ---生成testc.exe
2)先生成目标代码再生成exe程序:
gcc -c testc.c --先生成testc.o
gcc test1.c test2.c -o test
大致相当于依次执行如下三条命令:
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test
5)存在include头文件使用库文件的编译:
5.1)编译testc.c为目标文件
gcc –c –I /usr/dev/mysql/include test.c –o test.o
5.2)把所有目标文件链接成可执行文件
gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test
---Linux下的库文件分为两大类分别是动态链接库(通常以.so结尾,windows下为编译dll)和静态链接库(通常以.a结尾,windows下为编译lib),二者区别仅在于程序执行时所需的代码是在运行时动态加载的,还是编译时静态加载的
5.3)强制链接时使用静态链接库
gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test
---默认情况下GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库
6)检错
gcc -pedantic illcode.c -o illcode ---pedantic选项能够帮助程序员发现一些不符合 ANSI/ISO C标准的代码,但不是全部
gcc -Wall illcode.c -o illcode ---Wall选项能够使GCC产生尽可能多的警告信息
gcc -Werror test.c -o test ---Werror选项使GCC在所有产生警告的地方停止编译,迫使程序员对自己的代码进行修改
7)Linux下库文件搜索顺序
7.1) 静态库链接时搜索路径顺序:
- ld会去找GCC命令中的参数-L
- 再找gcc的环境变量LIBRARY_PATH
- 再找内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的
7.2) 动态链接时、执行时搜索路径顺序:
- 编译目标代码时指定的动态库搜索路径
- 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
- 配置文件/etc/ld.so.conf中指定的动态库搜索路径
- 默认的动态库搜索路径/lib
- 默认的动态库搜索路径/usr/lib
7.3) 有关环境变量:
LIBRARY_PATH环境变量:指定程序静态链接库文件搜索路径
LD_LIBRARY_PATH环境变量:指定程序动态链接库文件搜索路径
include "dll.h"
void hello(void)
{
printf("Hello\n");
}
dll.h:
/* Dll.h有一些技巧性的东西在里面。它检查这个BUILD_DLL宏,当我们编译时将手动设置BUILD_DLL宏,这时候宏EXPORT被设置成__declspec(dllexport), 这样GCC就能编译这个DLL。当从可执行文件中调用DLL时,BUILD_DLL宏没有被设置,EXPORT宏被设置成__declspec(dllimport), 它将使函数在调用范围内可见。 */ #ifdef BUILD_DLL /* DLL export */ #define EXPORT __declspec(dllexport) #else /* EXE import */ #define EXPORT __declspec(dllimport) #endif EXPORT void hello(void);
#include <stdio.h>
#include "dll.h"
int main()
{
hello();
system("pause");
;
}
1)编译dll.c为目标代码dll.o
gcc -c -DBUILD_DLL dll.c
---DBUILD_DLL来设置宏BUILD_DLL
2)创建DLL
gcc -shared -o message.dll dll.o [-Wl,--out-implib,libmessage.a]
---shared参数用来创建共享库(dll或lib)
---Wl等待下一条信息进行连接
---out-implib是给连接程序ld使用的,用于创建要连接dll需要的import library
3)编译hello.c为目标代码hello.o
gcc -c hello.c
4)生成hello的exe文件
gcc -o hello.exe hello.o -L./ -lmessage
---L 指定连接库路径
---lmessage (or -l message) 指定dll的import library
GCC编译C代码的更多相关文章
- ARMCC和GCC编译ARM代码的软浮点和硬浮点问题 【转】
转自:http://houh-1984.blog.163.com/blog/static/31127834201211112129167/ 本文介绍了ARM代码编译时的软浮点(soft-float)和 ...
- ARMCC和GCC编译ARM代码的软浮点和硬浮点问题【转】
转自:https://blog.csdn.net/hunanchenxingyu/article/details/47003279 本文介绍了ARM代码编译时的软浮点(soft-float)和硬浮点( ...
- Linux | GCC如何实现代码编译&&汇编&&链接过程
正文: 每次我们程序员所写的 代码 是给程序员看的呢?还是给电脑看的?其实我们所写的代码只是我们程序员之间交流的一样特殊语言,电脑是看不懂的.那么我们如何实现人机交流呢?这就不得不请出我们我们今天 ...
- 在Ubuntu 16.04 LTS上用g++和gcc编译C/C++代码错误提示“.../x86_64-linux-gnu/crt1.o: ELF section name out of range”
(有一些图片我是直接从个人的CSDN博客上复制来的) 最近一个多月来,我曾经多次尝试在Ubuntu 16.04 LTS上使用g++和gcc(这俩好像合起来叫MinGW?)来编译C/C++代码,但是在解 ...
- gcc编译代码报错及编译方式
一.error: 'for' loop initial declarations are only allowed in C99 mode 前段时间写了一个小C程序,放在linux下用gcc编译出错, ...
- GCC 编译优化指南(转)
GCC 编译优化指南(转) http://www.jinbuguo.com/linux/optimize_guide.html 作者:金步国 版权声明 本文作者是一位开源理念的坚定支持者,所以本文虽然 ...
- gcc编译时头文件和库文件搜索路径
特殊情况:用户自定义的头文件使用#include"mylib"时,gcc编译器会从当前目录查找头文件 一.头文件 gcc 在编译时寻找所需要的头文件 : ※搜寻会从-I开始( ...
- Linux——【转】gcc编译与gdb调试简要步骤
原文:gcc编译与gdb调试简要步骤 一.Linux程序gcc编译步骤: Gcc编译过程主要的4个阶段: l 预处理阶段,完成宏定义和include文件展开等工作:(.i) l 根据编译参数进行不同程 ...
- gcc编译的四个阶段:预处理,编译,汇编,链接
1:gcc编译的四个阶段:预处理,编译,汇编,链接 #vi file.c #gcc -E file.c -o file.i//-E查看且预处理后停止编译,-o生成目标文件,-i表示已预处理 #gcc ...
随机推荐
- soundtouch变速wsola算法之改进
soundtouch变速算法很类似sola算法,细看才知道是wsola算法. 上个星期有个需求,将该变速应用到直播的包处理,有点类似于webrtc的netEQ处理机制. 直接使用soundtouch, ...
- Web前端学习笔记:Bootstrap框架
很久之前就有很多人给我推荐twitter的Bootstrap框架,但是直到前几天我才真正学习了下Bootstrap,的确是相当棒的框架,至少从视觉体验上超越了很多以前碰到了前端UI框架.今天我要聊聊B ...
- zend studio 做前端推荐安装的插件
zend studio 做前端推荐安装的插件 1.Aptana插件代码提示 Zend Studio的aptana插件,解决了Zend Studio对前台代码支持不足的问题,而且在某些方面还比诸如dw优 ...
- C++代码重构——从C global到C++ template
在学数据结构的时候,我常有这样目标--写出能够最大程度复用的代码(算法正确,封装优秀).我常想--如何能在短时间内达成"算法正确,封装优秀"这样的目标.经过一段时间的摸索,我的结论 ...
- .NET LINQ 数据排序
数据排序 排序操作按一个或多个特性对序列的元素进行排序. 第一个排序条件对元素执行主要排序. 通过指定第二个排序条件,可以对各个主要排序组中的元素进行排序. 方法 方法名 说明 C# 查 ...
- 二、CoreAnimation之寄宿图详解
在之前的图层树中我们知道,可以使用CALayer对象创建一些有背景颜色的图层,其实使用CALayer,不仅可以利用其展示背景颜色,还可以展示图片.而这些展示内容,其实就是CALayer的寄宿图.这一节 ...
- Hotaru's problem(hdu 5371)
题意:给出一个数字串,询问最长的子串,满足以下要求:将子串平均分为三部分,一三部分相等,一二部分对衬. /* 在manachar的基础上,枚举回文串的中心,再找第三部分. */ #include< ...
- byte数组和File,InputStream互转
1.将File.FileInputStream 转换为byte数组: File file = new File("file.txt"); InputStream input = n ...
- hdu 3746 Cyclic Nacklace
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746 思路:KMP中Next数组的应用,求出最小的循环节,题目的意思是只能在字符串的后面上添加新的字符 ...
- Power BI for Office 365(一)移动端应用
此篇来自于微软商业智能网站的官方博客团队发布的Power BI在线资料其中的一部分,完整版地址: http://office.microsoft.com/en-us/office365-sharepo ...