标签:调用 创建 alt 简单的 ring ima 需要 找不到 一起
使用库函数是源码的一种保护?我猜的.
库函数其实不是新鲜的东西,我们一直都在用,比如C库.
我们执行pringf() 这个函数的时候,就是调用C库的函数.
下面记录静态库和动态库的生成和使用.
静态库:libxxx.a
动态库:libxxx.so
静态库: 在程序编译的时候,将库编译进可执行程序中, 运行的时候不需要外部函数库
动态库: 在程序运行的时候,将库加载到程序中,运行的时候需要外部函数库
函数库的目录有 /lib 和 /usr/lib 和 自定义
头文件是库文件的辅助,头文件就像是目录一样,介绍了这个库文件有哪些函数可以被调用.
下面通过一个简单的小栗子来介绍库函数怎么生成和使用.
1.库函数的源码 hello.c
#include "stdio.h" int hello(void){ printf("hello lib"); return 0; }
2. 库函数的头文件 hello.h
#ifndef __HELLO_H #define __HELLO_H int hello(void); #endif
库文件的头文件是库文件的目录,因为库文件是保护的,看不到里面的源码,所以把函数接口通过头文件来让人调用 .
这样就实现了接口,也保护了源码
3.编译静态库函数
3.1 将 hello.c 编译成目标文件 生成 hello.o文件
gcc -c hello.c
3.2 将.o文件打包成静态库 生成 libhello.a库文件
ar -cr libhello.a hello.o
4 使用静态库,因为静态库是在编译的时候一起打包进程序的,所以如果编译的时候没有静态库文件,则无法编译
4.1 main.c 写一个main函数来调用库函数
#include "hello.h" //引入库函数的头文件,这样才能找到函数声明 int main{ hello(); //调用库函数 }
正常编译的时候是没办法通过的. 因为编译器找不到 hello() 的实现代码
如图:
所以在编译的时候要加入库引用
gcc -c main -L. -lhello -o a.out
-L<路径> 引用自定义库的路径,如果调用系统库就不用-L ‘.‘表示当前文件夹
-lxxxx 这里libhello.a 只要写hello 就可以 //小写的L
标签:调用 创建 alt 简单的 ring ima 需要 找不到 一起
原文地址:https://www.cnblogs.com/kmist/p/10088585.html