windows 使用vs2015 如何新建C++或者C语言版的lib文件
来自:
https://www.cnblogs.com/ahcc08/p/6810033.html
VS2015如何新建C++或者C语言版的lib文件
当我们不想公开我们的代码的时候,可以把我们的代码封装成静态数据连接库,即lib文件。下面介绍下如何生成lib文件。
以VS2015为例,一种是C++版的lib文件,一种是C语言版的lib文件。
一、按照下图新建Win32项目TestLib。
二、选择静态库,取消预编译。
三、新建完工程后,我们创建一个头文件和一个cpp文件。
TestLib.h
#pragma once
void HelloWorld();
TestLib.cpp
1
2
3
4
5
6
7
|
#include <stdio.h> #include "TestLib.h" void HelloWorld() { printf ( "Hello World\n" ); } |
编译该工程后,我们得到一个TestLib.lib文件。
四、再新建一个Win32控制台程序TestApp,进行测试。
在TestApp.cpp里引入TestLib.h
1
2
3
4
5
6
7
8
9
10
11
|
// TestApp.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include "..\TestLib\TestLib.h" int main() { HelloWorld(); return 0; } |
指定TestLib.lib的路径,方法如下:
右键TestApp项目,点击属性,进入下图,在【连接器】--【输入】--【附加依赖项】里输入TestLib的路径。这里写的是相对路径 $(OutputPath)TestLib.lib。
这样即使把我们的项目移到其他的目录里,依然能够进行debug。
五、把TestApp项目设定成启动项。
六、编译后,得到运行结果
从上面可以看出我们的lib项目里的TestLib.cpp是cpp文件,即C++文件。
如果我们把TestLib.cpp改成TestLib.c的话,这时候重新编译lib工程,然后运行TestApp,
会出现如下错误:
有时候,可能因为某种原因,lib文件必须是C语言,那么该怎么解决?
这时候,我们需要更改我们TestLib.h这个文件。
1
2
3
4
5
6
7
8
9
10
11
|
#pragma once #ifdef __cplusplus extern "C" { void HelloWorld(); #endif #ifdef __cplusplus } #endif |
注意:当把Debug 换成release时候,需要重新设置静态库连接。
静态库
打开VS2015,新建一个项目,选择win32项目,点击确定,选择静态库这个选项,预编译头文件不选。
在这个空项目中,添加一个.h文件和4个.cpp文件。名字我们起为head.h和add.cpp,div.cpp,mul.cpp,sub.cpp
head.h文件:
#include"head.h"
int add(int a, int b)
{
return a + b;
}
#include"head.h"
double div(int a, int b)
{
return (a + 0.0) / (b + 0.0);
}
#include"head.h"
int mul(int a,int b)
{
return a*b;
}
sub.cpp:
#include"head.h"
int sub(int a, int b)
{
return a - b;
}
编译这个项目之后(生成——》生成解决方案),会在debug文件夹下生成mymath.lib文件,这个就是我们需要的静态链接库。
下面说明如何调用静态链接库。
- 首先需要新建一个空项目,起名为test_mymath。
- 将之前static项目下的head.h这个文件复制到mymath项目的目录下
- 在工程中加入head.h文件,快捷键:Ctrl + Alt +A添加现有项:
新建一个20145211hzy.cpp文件如下:

编译运行可得结果:
#pragma comment(lib,"mymath.lib"),这一句是显式的导入静态链接库。除此之外,还有其他的方法,比如通过设置路径等等,这里不做介绍。
或者 选中工程名,点击右键 -> 属性, 在“ VC++目录 ”的包含目录里面加入head.h的所在目录的路径,库目录里面加入mymath.lib所在目录的路径;在链接器->输入->附加依赖项输入“mymath.lib”。然后源文件里添加#include"head.h"就OK了。
我们经常用到的是#pragma comment(lib,"*.lib")这类的。#pragma comment(lib,"Ws2_32.lib")表示链接Ws2_32.lib这个库。
和在工程设置里写上链入Ws2_32.lib的效果一样,不过使用这种方法,别人在使用你的代码的时候就不用再设置工程settings了。
放在相对于的 目录下面。 #pragma comment(lib,"../testlib/testlib.lib")
VS2015——命令行下编译、静态库动态库制作以及断点调试: https://www.cnblogs.com/nostalgia-/p/6104226.html
参考:
https://www.cnblogs.com/ahcc08/p/6810033.html
https://www.cnblogs.com/nostalgia-/p/6104226.html
VS2015——命令行下编译、静态库动态库制作以及断点调试: https://www.cnblogs.com/nostalgia-/p/6104226.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律