C语言基础:预编译阶段(宏定义,选择性编译)以及静态库和动态库的制作和使用

本文介绍了C语言中的宏定义(包括带参和不带参)、选择性编译的使用方法以及静态库与动态库的制作与链接,重点讲解了如何在不同情况下正确编译和链接库文件。
摘要由CSDN通过智能技术生成

一 宏定义

#undef 宏名称 //取消宏定义

1,带参宏(定义的是函数)

#define 宏名称 (参数) 代码
如:
在这里插入图片描述
与函数的区别;(建议使用函数)
带参宏
节省时间 浪费空间(将代码直接在预编译后替换回.c文件中,直接挨个执行)
函数
节省空间 浪费时间 (将函数压栈一层层调用函数,代码量少,但是每次都得调用)

2,不带参宏(定义的是值)

方式一: 静态定义
#define 宏名称 值
如:#define pei 3.141592678
方式二: 动态定义
在编译时定义宏
gcc 源文件名 -o 生成的可执行文件名 -D 宏名称 值
如: gcc test.c -o test -D pei 3.141592678

二 选择性编译

在这里插入图片描述
语法结构与if else相似

头文件模板

在这里插入图片描述
在.h头文件中,引入选择性编译,用上述模板嵌套声明和结构体,可以在多次掉用这个.h头文件时,防止头文件多次重复展开

三 动态库与静态库

静态编译使用静态库
动态编译使用编译库
在这里插入图片描述

1.静态库

制作静态库:

注意:静态库名必须要以lib开头,以.a后缀名结尾

1.将所有要编译为库文件的.c文件编译为二进制.o文件
命令:
gcc -c 源文件.c -o 二进制文件名.o
2.将所有二进制文件.o生成库文件
命令:
ar rc 静态库名.a 二进制文件.o

使用静态库:
1.库和源文件在同一个目录下
命令:
gcc -c -static 源文件 静态库名.a -o 可执行文件

2.库和源文件在不同目录下(大多数情况)
注意:
-L库文件所在的文件地址
-l(小写L)库文件名(去掉lib前缀和.a后缀)
-I(大写i)静态库所在头文件位置(-L-l-i与后面的地址之间没有空格)
命令:
gcc -static 源文件.c -L库文件所在的文件地址 -l库文件名 -I静态库所在头文件位置

3.库和头文件都存放在系统目录下

注意:
库文件的默认路径是/lib 或者是/user/lib 头文件的默认路径是/user/include
如果要测试,要将自己制作的库函数移动到以上两个目录中

命令:
gcc -static 源文件.c -l库文件名 -o 可执行文件名
注意: -l(小写L)库文件名(去掉lib前缀和.a后缀)

2.动态库

制作动态库:
1.将所有要编译为库文件的.c文件编译为二进制.o文件
命令:
gcc -shared 源文件.c -o 二进制文件名.so
注意:可能会报错:在这里插入图片描述
解决在上述命令中加入参数-fPIC
gcc -shared -fPIC 源文件.c -o 二进制文件名.so

使用动态库:
1.库和源文件在同一个目录下
命令:
gcc 源文件 lib动态库名.so -o 可执行文件

2.库和源文件不在同一个目录下
gcc 源文件名 -o 生成的可执行文件名 -L 库文件所在位置 -l 库文件名 -I 头文件所在位置 (注意:此时库文件名不要加后缀)

3.在系统路径下
gcc 源文件 -o 可执行文件 -l库名称 (注意:此时生成动态库时名称前必须加lib)
注意:在运行时可能会报错:
在这里插入图片描述
解决方法:
在控制台输入以下:

export LD_LIBRARY_PATH=库文件所在目录:$LD_LIBRARY_PATH 如: export
LD_LIBRARY_PATH=/home/edu/share/day08/11_code:$LD_LIBRARY_PATH

  • 32
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值