感觉对这个有些晕,做了个实验,弄清楚了。
实验思路,用同一份代码编译同时生成动态和静态库,通过测试程序调用,看调用的是动态库还是静态库。
生成静态库代码:
/***********hellod.h*************/
#ifndef _HELLO_S_H
#define _HELLO_S_H
void prints(char *str);
#endif
/*hellod.c*/
#include "hellod.h"
#include <stdio.h>
void printd(char *str)
{
printf("print in static way:%s",str);
}
gcc -c -o hellod.o hellod.c
ar cqs libhellod.a hellod.o
生成的静态库为libhellod.a
生成动态库代码:
将上面hellod.c中的打印语句,打印输入:print in dynamic way。以示区别。
gcc -shared -o libhellod.so hellod.c
生成的动态库为libhellod.so。
测试代码main.c
#include "hellod.h"
int main(void)
{
char *text = "hello,world/n";
printd(text);
}
使用静态库:gcc -o hello main.c -static -L./ -lhellod
执行生成文件,打印:print in static way:hello,world
使用动态库: gcc -o hello main.c -L./ -lhellod
执行后,打印 print in dynamic way:hello,world