动态库(Dynamic Library)和静态库(Static Library)是在软件开发中常用的两种库文件形式。
静态库是一组已编译的目标文件的集合,它们被打包成一个单独的文件。当程序链接时,编译器会将静态库的目标文件直接嵌入到最终的可执行文件中。静态库在编译时被完整地复制到可执行文件中,使得可执行文件成为一个独立、自包含的实体。这意味着程序运行时不需要额外的库文件支持,所有所需的代码都已嵌入到可执行文件中。静态库的扩展名通常是 .a(对于UNIX/Linux)或 .lib(对于Windows)。
相比之下,动态库是一组已编译的目标文件的集合,它们在运行时由操作系统动态加载到内存中。当程序链接时,编译器只会在可执行文件中包含动态库的引用,而不会将实际的代码嵌入到可执行文件中。程序在运行时,通过动态链接器(如 Windows 的 DLL 动态链接库或 UNIX/Linux 的共享对象文件 .so)将动态库加载到内存,并与可执行文件进行连接。动态库的扩展名通常是 .so(对于UNIX/Linux)或 .dll(对于Windows)。
A:不能 ,制作的库函数是给别人使用的,两个main函数会引起冲突!
这里我以static.c static.h命名 写了个打印函数
#include"static.h"
void _Printf(int i)
{
while(i>0)
{
printf("这是一个静态库\n");
i--;
}
}
#pragma once
#include
void _Printf(int i);
然后在test.c中包含头文件 static.h 这里跟我们平时在VS下写代码 声明和定义分离是一样的道理
#include"static.h"
int main()
{
_Printf(10) ;
return 0;
}
~
做好这几部工作之后就到重头戏啦~
test: test.c libstatic.a
gcc -o $@ $^ -std=c99
libstatic.a: static.o
ar rcs $@ $^
static.o: static.c static.h
gcc -c -o $@ $< -std=c99
.PHONY: clean
clean:
rm -f test libstatic.a static.o
通过修改 makefile 并重新运行 make 命令,你应该能够成功编译并链接包含自定义静态库的程序。
成功~ 这就成功
♀️
未完待续~