目录
1. 找不到你描述fin_max.h那一个头文件""引起来的头文件先在当前目录查找,找不到就去标准路径找
2. 编译器找不到函数的实现(定义)函数find_max的实现在libfind_max.so这个库里面,但是编译器不知道
3. 上面仅仅是指定了库的名字,编译器在标准路径(/usr/lib:/lib)下面找不到名字叫做libfind_max.so的库文件
前言:库文件:动态库和静态库
二进制的仓库(一个已经实现好的,可以直接调用的功能模块)
库是一种二进制的封装形式,其他的源代码可以直接调用库中已经实现的函数模块或者其他功能模块,但是又看不到他的源代码
库这种方式有利于模块化,以及代码重用,而且只要接口设计合理,改变库的实现方式,不影响使用库的源代码的
如:
printf()/scanf()/strlen() 只需要使用即可,不需要知道它是如何实现的
库是如何来的呢?
源代码(一般没有主函数)------>编译------->二进制文件(01)
1.动态库(又叫做共享库)
动态库的使用步骤:
a.先制作一个动态库
1.先编写库函数的源代码
xxx.c 库文件的功能实现
xxx.h 函数以及数据类型的声明(接口文件)
2.把你写的库函数(模块)的源代码编译成为动态库
把功能源代码变成一种谁都可以调用的二进制形式
gcc -shared -fpic -o libxxx.so xxx.c xxx.c
编译器名称 共享库 与位置无关的 output 生成的库的名字 源文件列表
libxxx.so 你指定的生成的库的名字,必须以lib开头,以.so结尾
xxx.c xxx.c 你生成库文件的源文件列表,可以有多个,以空格隔开
如:
把find_max这个功能制作为一个动态库文件
gcc -shared -fpic -o libfind_max.so find_max.c
生成了一个库文件
file libfind_max.so 查看库文件的详细信息
就可以把库文件(libfind_max.so)和头文件(find_max.h)拷贝给其他人使用了
b.在写一个其他的源代码调用这个库文件
在其他源代码中直接包含接口文件,就可以直接使用库中的函数
如:当前源代码存在的结构如下
inc/ 存放一些外部引用的头文件
lib/ 存放一些外部引用的库文件
src/ 当前项目的源文件
change_log.txt 修改和更新的记录日志信息
readme.txt 注意事项和说明
编译自己源代码的时候,可能会遇到一些如下的错误:
1. 找不到你描述fin_max.h那一个头文件""引起来的头文件先在当前目录查找,找不到就去标准路径找
gcc main.c -o main
main.c:2:10: fatal error: find_max.h: 没有那个文件或目录
#include "find_max.h"
解决方法:
1.把自己的头文件放到当前目录下面或者放到标准路径下面(不建议)
2.手动指定头文件的查找路径
-I Include
-I后面接一个目录名,指定当前编译时,头文件的查找路径