文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

linux链接编译详解

2022-06-04 21:39

关注


为什么要包含头文件而不是.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("testn");
}

编译后执行

输出: 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选项指定的目录,最后再查找系统的头文件目录。


静态库



char stack[512];
int top = -1;



extern char stack[512];
extern int top;
void push(char c)
{
stack[++top] = c;
}



extern char stack[512];
extern int top;
char pop(void)
{
return stack[top--];
}



extern int top;
int is_empty(void)
{
return top == -1;
}



#ifndef STACK_H
#define STACK_H
extern void push(char);
extern char pop(void);
extern int is_empty(void);
#endif



#include <stdio.h>
#include "stack.h"
int main(void)
{
push('a');
char c = pop();
printf("%cn",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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-人工智能
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯