linux链接编译详解
发布时间:2023-07-02 16:05:11
标签:linux,链接编译
为什么要包含头文件而不是.c文件
测试代码:
m.c文件:
#include"t.c"
int main()
{
test();
return 0;
}
编译:
gcc m.c -o m -Wall
In file included from m.c:1:0:
t.c: 在函数‘test'中:
t.c:3:2: 警告: 隐式声明函数‘putchar' [-Wimplicit-function-declaration]
编译通过,只有一个警告,生成了可执行文件m,运行它正常,输出一空格。
修改下t.c 文件:
#include<stdio.h>
void test()
{
printf("test\n");
}
编译后执行
输出: test
从这可看出,包含.c文件进去对程序并没造成什么影响,反而比包含.h文件来得直接方便,这里主要考虑到大型项目中,各文件直接的联系,如A.c文件中包好M.c文件,B.c 文件中包含M.c文件,而A.c文件又包含B.c文件,那么编译时就会报错,函数名重定义了。
#include<>与#include""的区别:
对于用角括号包含的头文件,gcc 首先查找-I选项指定的目录,然后查找系统的头文件目录(通常是/usr/include,在我的系统上还包括/usr/lib/gcc/i486-linux-gnu/4.3.2/include);而对于用引号包含的头文件,gcc 首先查找包含头文件的.c文件所在的目录,然后查找-I选项指定的目录,最后再查找系统的头文件目录。
静态库
/* stack.c */
char stack[512];
int top = -1;
/* push.c */
extern char stack[512];
extern int top;
void push(char c)
{
stack[++top] = c;
}
/* pop.c */
extern char stack[512];
extern int top;
char pop(void)
{
return stack[top--];
}
/* is_empty.c */
extern int top;
int is_empty(void)
{
return top == -1;
}
/* stack.h */
#ifndef STACK_H
#define STACK_H
extern void push(char);
extern char pop(void);
extern int is_empty(void);
#endif
/* main.c */
#include <stdio.h>
#include "stack.h"
int main(void)
{
push('a');
char c = pop();
printf("%c\n",c);
return 0;
}
将如上5个.c文件和一个.h文件放在同目录下,在当前目录下新建一Makefile文件,使用Makefile是编译。
main:libstack.a main.o
gcc -o main main.o -L. -lstack
libstack.a: stack.o push.o pop.o is_empty.o
ar rs libstack.a stack.o push.o pop.o is_empty.o
stack.o:
gcc -o stack.o -c stack.c
push.o
gcc -o push.o -c push.c
pop.o:
gcc -o pop.o -c pop.c
is_empty:
gcc -o is_empty.o -c is_empty.c
main.o:
gcc -o main.o -c main.c
编译后执行./main
显示:a
反编译指令: 查看反编译后程序
objdump -d main


猜你喜欢
- 我做了如下测试:(1) http://www.xxx.com/new/new.asp?id=49’Microsoft OLE DB Prov
- VMware Workstation/Fusion 分别是 Windows/Linux 和 macOS 下面对应的桌面虚拟化软件。过去,在
- 现在站长都忙于SEO,忙于采集后修改为伪原创,却忽视了网站最重要的平台--服务器提供商!欲知详情,接着看!现在我们看到,SEO的文章大行其道
- 由于广大站长搜索引擎优化(SEO)在国内不断的升温,加上搜索引擎算法的不算完善,曾经单纯的“mate标签+文本优化等”优化手法已经被现在考虑
- 我们都知道Kloxo这个国外非常著名的开源的服务器管理系统,虽然Kloxo在国内使用起来会遇到不少的问题,但是由于Kloxo可以与WHMCS
- 今天一早打开电脑的第一件事情就是查一下网站的收录,发现今天百度更新了快照,而谷歌则比昨天多收录了近50个页面,这下可乐坏了,敢快查一下自己网
- 昨天群里的一位朋友给我看的一篇U8上的帖子,讲的autoblog结合AdSense的些做法。帖子很不错,很多细节方面都讲的很详细,包括aut
- # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /et
- 前言:Jenkins的Master-Slave分布式架构主要是为了解决Jenkins单点构建任务多、负载较高、性能不足的场景。Master-
- Linux启动后出现boot:提示时,使用一个特殊的命令,如linuxsingle或linux 1,就能进入单用户模式(Single-Use
- 我也把我的方法做了一下实验,使用serv-u做的,有一点错误,不过终归做了出来,下面总结一下:PASV服务器放在ISA后面,其实就是要解决两
- 在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其解析到IP地址的工作,而直接输入网站IP却可以正常访问
- 商场如战场。不过在互联网的商战中真正的刀枪箭戟不多,取而代之的是口水。似乎不打打口水仗就显得不热闹。前有瑞星和奇虎,后有搜狐和迅雷等等,反正
- 西方的传统节日万圣节,是一个神秘又有趣的节日,同样是西方故事背景的《商业大亨》自由城,也准备了趣味的万圣节活动,以及南瓜头像南瓜装,与各位大
- 2009中国经济在经过金融危机的洗礼后呈现出逐季企稳回升的态势,分析人士指出,中国经济有望在未来一段时期内重新恢复快节奏的增长步伐,而作为高
- 在上次写完《史上最牛GOOGLE收录单页面时间记录:60秒》之后对WordPress的优化更有感触,于是这里总结下WordPress创建CM
- 当前国内B2B电子商务模式包括两种类型,一种是第三方电子商务平台,我国中小企业有4000多万,由于中小企业自身条件的限制,拥有网站的只有不到
- 国产网游在经历了飞速发展的同时,内容低俗、同质化等现象也日趋严重。日前,继下令关闭45款低俗暴力网络游戏之后,国家新闻出版总署整治网游市场再
- 衡量一个网站是否运营的成功,我想都离不开这几个要素,专业,互动,用户体验,亮点(围绕以盈利模式确立的亮点).一个简单的公式,专业+互动+用户
- 古往今来,神话一直都是华夏灿烂文化的瑰宝,给人们的外在世界缔造了一个美丽的梦。今天,game2平台斥资1500万,打造耗时3年,再现上古的不