1 生成windows中静态链接的静态库
和2中linux的完全相同。
2 生成和使用linux中的.a静态链接库。
如下例:
/* hellos.h */
#ifndef _HELLO_S_H
#define _HELLO_S_H
#include <stdio.h>
void printS(char* str);
#endif
输入命令:
gcc -c -o hellos.o hellos.c
ar cqs libhellos.a hellos.o
linux中.a文件的名字是有规则的lib[name].a
于是得到了libhellos.a这么一个静态链接库
2:主程序
/* main.c */
#include "hellos.h"
void main() {
char* text = "Hello World!\n";
printS(text);
}
编译链接:
gcc -o hello main.c -L. -lhellos
注意-main.c要放在-L. -lhellos前面,否则出错。
然后运行hello可以看到输出
print in static way: Hello World!
删除libhellos.a和hellos.*后, 程序仍然正常运行。
不知道g++为什么不行。
3 生成windows中的dll,并进行隐式链接使用。
在上面hellos.h hellos.c hellos 三个文件的基础上。
生成dll:gcc -shared -o helloc.dll helloc.c
使用dll:gcc -o hello main.c -L. -lhellos
-----------------------------------------------------------------------------------------------------------------------------------------------------------
这样就将hellos.dll和hello链接上了。删除hellos.dll时候会报错找不到dll。
感觉这算是gcc提供的一种机制了?
由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码,此处属于其中的一种方式把。
注意:这里并没有进行windows中下面的各种复杂声明。
windows中的两种链接方法的原理性解释:
链接库分为静态链接库和动态链接库,而动态链接库在使用时,又进一步分为装载时链接