VS2015如何新建C++或者C语言版的lib文件
当我们不想公开我们的代码的时候,可以把我们的代码封装成静态数据连接库,即lib文件。下面介绍下如何生成lib文件。
以VS2015为例,一种是C++版的lib文件,一种是C语言版的lib文件。
一、按照下图新建Win32项目TestLib。
二、选择静态库,取消预编译。
三、新建完工程后,我们创建一个头文件和一个cpp文件。
TestLib.h
#pragma once void HelloWorld();
TestLib.cpp
#include <stdio.h>
#include "TestLib.h" void HelloWorld()
{
printf("Hello World\n");
}
编译该工程后,我们得到一个TestLib.lib文件。
四、再新建一个Win32控制台程序TestApp,进行测试。
在TestApp.cpp里引入TestLib.h
// 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这个文件。
#pragma once #ifdef __cplusplus
extern"C" { void HelloWorld();
#endif #ifdef __cplusplus
}
#endif
为了在C++代码中调用用C写成的库文件,就需要用extern"C"来告诉编译器:这是一个用C写成的库文件,请用C的方式来链接它们。
这样重新编译我们的Testlib.lib后,再次运行TestApp就可以了。
VS2015如何新建C++或者C语言版的lib文件的更多相关文章
- 排序算法总结(C语言版)
排序算法总结(C语言版) 1. 插入排序 1.1 直接插入排序 1.2 Shell排序 2. 交换排序 2.1 冒泡排序 2.2 快速排序 3. 选择 ...
- libnode 0.4.0 发布,C++ 语言版的 Node.js
libnode 0.4.0 支持 Windows ,提升了性能,libuv 更新到 0.10.17 版本,libj 更新到 0.8.2 版本. libnode 是 C++ 语言版的 Node.js,和 ...
- md5加密算法c语言版
from: http://blog.sina.com.cn/s/blog_693de6100101kcu6.html 注:以下是md5加密算法c语言版(16/32位) ---------------- ...
- 基于gSOAP使用头文件的C语言版web service开发过程例子
基于gSOAP使用头文件的C语言版web service开发过程例子 一服务端 1 打开VS2005,创建一个工程,命名为calcServer. 2 添加一个头文件calc.h,编辑内容如下: 1// ...
- Windows 8.1 with Update 镜像下载(增OEM单语言版)
该系统已有更新的版本,请转至<Windows 8.1 with update 官方最新镜像汇总>下载. 2014年4月9日凌晨,微软向MSDN订阅用户开放了Windows 8.1 with ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- hbase rest api接口链接管理【golang语言版】
# go-hbase-resthbase rest api接口链接管理[golang语言版]关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/boo ...
随机推荐
- mac 下安装securecrt
下载文件链接中附带的文件. 1.先找到secureCRT的包内容,进入MACOS文件夹.替换crack中的secureCRT文件. 2.断网.进入软件,显示你的验证码过期.点continue.选择手动 ...
- cuda编程学习3——VectorSum
这个程序是把两个向量相加 add<<<N,1>>>(dev_a,dev_b,dev_c);//<N,1>,第一个参数N代表block的数量,第二个参数1 ...
- jsp中九大内置对象
jsp实质是一个Servlet类,当jsp页面第一次被访问时,就会被服务器翻译成.java文件,紧接着就编译成.class文件. jsp<% %>和<%= %>脚本中可以直接使 ...
- Appium 解决手势密码 java
if(driver.getPageSource().contains("绘制解锁图案")){//检测是否是有手势密码出现 List<AndroidElement> el ...
- iphone与安卓的兼容性问题汇总
1.日期问题 当使用yyyy-mm-dd格式时,iphone不认,安卓没问题 解决办法:new Date(res.data[i].inventoryDate.replace(/-/g, "/ ...
- 分布式文件管理系统_FastDFS集群
简单介绍 1,client storage tracker的关系 先用一幅图来解释用户如何访问一个通过DFS管理的文件 一般来说,一台服务器只有一个storage server,多个storage s ...
- NTP时间服务器
1. NTP简介 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0 ...
- 20155231 2016-2017-2 《Java程序设计》第5周学习总结
# 20155231 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 学习目标 理解异常架构 掌握try...catch...finally处理异常的方法 会 ...
- 异步编程的两种模型,闭包回调,和Lua的coroutine,到底哪一种消耗更大
今天和人讨论了一下CPS变形为闭包回调(典型为C#和JS),以及Lua这种具有真正堆栈,可以yield和resume的coroutine,两种以同步的形式写异步处理逻辑的解决方案的优缺点.之后生出疑问 ...
- 记录一次raid数据恢复及回迁成功的案例
故障发生在两块盘组成的一个raid0上,其中的一块盘亮黄灯,被raid卡踢出后,raid崩溃,下面就把当时抢救数据的整个过程进行介绍. 由于硬盘是两块SAS 300G的硬盘,先把硬盘从机器中拔出来,然 ...