windows制作lib静态库
windows制作lib静态库
编译链接
写几对c和h
// math_operations.c
#include "math_operations.h"
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
// math_operations.h
#ifndef MATH_OPERATIONS_H
#define MATH_OPERATIONS_H
int add(int a, int b);
int subtract(int a, int b);
#endif // MATH_OPERATIONS_H
编译:
cl /c math_operations.c
此时生成math_operations.obj
// tt.h
#ifndef TT_H
#define TT_H
int invokemessagebox(LPCSTR context,LPCSTR title);
#endif // TT_H
//tt.c
#include <windows.h>
int invokemessagebox(LPCSTR context , LPCSTR title){
MessageBox(
NULL,
context,
title,
MB_ICONINFORMATION | MB_OK
);
return 0;
}
同样的方式编译:
cl /c tt.c
此操作将生成文件tt.obj
下面将多个obj文件制作成lib文件:
lib /OUT:mylibrary.lib math_operations.obj tt.obj
生成的lib文件即为供使用的静态库二进制文件,使用时候include对应的h文件,在链接参数添加对应的lib文件.
#include <stdio.h>
#include <windows.h>
#include "math_operations.h"
#include "tt.h"
int main() {
int result = add(10, 5);
printf("Addition result: %d\n", result);
result = subtract(10, 5);
printf("Subtraction result: %d\n", result);
LPCSTR b = "Title";
LPCSTR a = "Context";
invokemessagebox(a,b);
return 0;
}
使用如下命令链接静态库
cl main.c /link /DEFAULTLIB:mylibrary.lib user32.lib
由于tt.c
中引入了windows.h
,文件链接时候还需要添加user32.lib
才能找到tt中引入的符号,否则会报错;