一、静态库的制作与使用
我的项目已跑通,这里举个例子进行过程记录方便下次制作静态库。后续如果遇到不同方法制作静态库会来继续记录。
该过程至少需要建两个项目,一个项目用于正常编写程序与调用静态库测试,另一个项目用于生成静态库。第一步我们先建一个编写程序的项目,如果程序已编写完成,且可顺利跑通,则直接看第二步即可。
第一步:编写程序(y=a*(b+c))
在写程序时一般需要好几个.c文件,以实现同一个文件内调用函数和不同文件间调用,这里举一个两个文件的例子,首先创建一个空项目StaticLibTest
右键点击头文件-> 添加->类
按照该方法添加两个,一个文件实现乘法,一个实现加法
如下图所示,multiplication.c/h文件实现乘法,sum.c/h实现加法,另外还需要在源文件中添加一个新建项用于测试。
multiplication.c
#include "multiplication.h"
float Multiplication(float a, float b)
{
return a * b;
}
multiplication.h
#pragma once
#ifndef __MULTIPLICATION_H__
#define __MULTIPLICATION_H__
#include "sum.h"
float Multiplication(float a, float b);
#endif
sum.c
#include "sum.h"
float sum(float a, float b)
{
return a + b;
}
sum.h
#pragma once
#ifndef __SUM_H__
#define __SUM_H__
#include <stdio.h>
float sum(float a, float b);
#endif
test.c
#include "multiplication.h"
// 实现功能:y=a*(b+c)
int main()
{
float result;
float a = 3.56734522;
float b = 4.15926535897;
float c = 12.9323846;
result = Multiplication(a, sum(b, c));
printf("a*(b+c)的结果为:%f", result);
}
运行结果
说明该程序无问题。我们接下来将其封装成静态库。
第二步:静态库封装
新建项目-项目模板选择静态库,项目名称为StaticLib1
进来以后,会发现已经有生成的文件,全部删除
按照前面的方法重新创建两个类(multiplication 和sum)将我们创建的文件内容复制过来(是每个文件里的内容,不是文件;不包括测试文件test.c),一定要重新创建!!!直接复制文件会出现问题。随便打开一个文件,点击项目->属性
将该页面“预编译头”改成不使用预编译头。
接下来点击运行,运行程序,出现这个界面不用管
找到该项目文件夹
复制生成的StaticLib1.lib到我们创建的需要调用静态库的测试项目中,我是在StaticLibTest项目进行测试的,需要将项目文件夹里的.c/.h文件删除。里边的(右键点击解决方案->在文件资源管理器中打开) 并且将我们用到的.h文件:sum.h、multiplication.h也复制过来与.lib放到同一文件夹下,将之前的.c/.h文件全部删除(若想在该项目下测试必须要全部删除,否则会报错),或者为了保险起见重新建一个测试项目,在源文件中右键->添加->新建项建operationtest.c调用静态库测试
operationtest.c代码
#include "multiplication.h"
#include "sum.h"
#pragma comment(lib, "StaticLib1.lib")
// 实现功能:y=a*(b+c)
int main()
{
float result;
float a = 3.56734522;
float b = 4.15926535897;
float c = 12.9323846;
result = Multiplication(a, sum(b, c));
printf("a*(b+c)的结果为:%f", result);
}
运行结果
我们只需要用生成的.lib文件与我们写的所有.h文件 ,便可以再次调用函数了
二、动态库制作与使用
参考博客中的方法一:隐式调用;整体步骤与静态库相似
C语言动态库的封装和使用_windows封装c语言动态库-CSDN博客https://blog.csdn.net/xiaotai1234/article/details/112670669