使用Visual Studio 2017写静态库

发布时间 - 2026-01-11 00:51:22    点击率:

造轮子是一件有趣的事情,VS是一个强大的工具,能胜任超大规模的工程,但是讲真,对不那么大的项目配置起来不是那么友好(网上的其他教程也一点都不友好Orz)。这里就展示一下构建一个简单的静态库的正确姿势。(顺便教一点道理

创建解决方案——许多人搞不清工程/项目Project和解决方案Solution的区别,在VS中,Project是基本的执行单元,一个Solution可以包含多个Project——我们的静态库就将会包含几个(.lib)Project和一个(.exe)Project用作测试。解决方案选win32 Console Application控制台。

类型选Static Library静态库,去掉Precompiled Header预编译头选项。

添加头文件和源文件。

源文件.cpp同理,之后应该是这个样子:

(注意,只添加.h文件而没有.cpp是不行的,这样一个工程编译不出来.lib库,之后你测试的时候就会出现" "xxx.lib": cannot open file specified"之类的报错别问我怎么知道的Orz)

(另一种回头cannot open file specified的原因是.lib生成的位置不对,在这里看Solution Explorer->Properties属性页

->Output Direction输出目录

默认那个是对的在\Debug目录下,谁知道怎么会错)

然后就可以写代码了:

//  MathLib.h
#pragma once
int add(int x, int y);
//  MathLib.cpp
#include "MathLib.h"
int add(int x, int y) { return x + y; }

然后你需要一个Project来测试(回想开头说的,一个Solution可以有多个Project,它们都是执行单位(一会会再讲到怎么叫执行单位这是我自己造的概念)),在Solution Explorer里面为Solution加入新工程:

选控制台,把预编译头去掉和之前一样,现在我们得到了一个含有俩Projects的Solution了:

编写一段测试代码

//  Test.cpp

#include "stdafx.h"
#include "..\MathLib\MathLib.h"
#include <iostream>

int main()
{
  std::cout << add(1, 2) << std::endl;
  return 0;
}

现在需要为Test添加MathLib的引用,这一步实际的作用是,在引导IDE用cl编译器命令行编译的时候,加入正确的链接选项(CSAPP有非常inspiring的讲解,源文件#include了头文件以后只是为链接器介绍了一堆未重定位的符号,它需要在库文件(静态库的话Linux是.a文件Windows是.lib)里找这些符号完成重定位),找到这些库很重要。在Solution Explorer里面Add Reference如图

VS很贴心地把Solution里的Projects列进了备选项,选中即可。

此时Test的Reference里就有MathLib工程了。

下一步,为cl编译器添加include路径,也就是说,预编译期应该怎么找MathLib.h以完成符号的引入。在Test Properties属性页->C++->General->Additional Include Directaries附加包含路径,就是额外于标准库头文件目录的其他(自定义)头文件包含的目录,cl要去这些地方找MathLib.h。选择添加MyStaticLibrary\MathLib这个目录OK。

这个时候万事俱备,F5组建运行结果报了这么个错:

说.lib不是有效的win32应用不能运行。对呀我本来也没要运行它呀,可是VS怎么知道Solution里面这么多Projects应该运行哪一个?(想想之前的执行单元理解到是什么意思了吧,每个Project编译的结果都认为可执行)第一个添加的Project是MathLib所以VS默认去运行它的输出所以错了。想办法引导VS去运行Test的输出(Test.exe),Solution Explorer->MyStaticLibrary Properties属性页:

设单启动工程为Test,OK。

Build & Run!

祝大家造轮子愉快!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Visual  # Studio  # 2017  # 静态库  # Visual Studio 2017安装心得总结  # Microsoft Visual Studio 2017 for Mac Preview安装使用案例  # Visual Studio 2017 (VS 2017)离线安装包制作方法  # Visual Studio 2017 ASP.NET Core开发  # Visual Studio 2017安装失败的解决方法  # Visual Studio 2017正式版离线安装教程  # 精彩回顾!Visual Studio 2017正式版发布全纪录  # 使用Visual Studio 2017作为Linux C++开发工具  # Visual Studio 2017设置版权的方法  # Visual Studio 2017正式版发布 Mac版新功能特性有哪些  # 头文件  # 多个  # 都是  # 是一个  # 几个  # 就会  # 在这里  # 都不  # 第一个  # 将会  # 就有  # 万事俱备  # 这么多  # 要去  # 进了  # 错了  # 这是我  # 很重要  # 这样一个  # 许多人 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  PHP 500报错的快速解决方法  如何实现javascript表单验证_正则表达式有哪些实用技巧  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  智能起名网站制作软件有哪些,制作logo的软件?  如何利用DOS批处理实现定时关机操作详解  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel如何使用.env文件管理环境变量?(最佳实践)  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  网站制作软件有哪些,制图软件有哪些?  如何在建站主机中优化服务器配置?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel如何生成URL和重定向?(路由助手函数)  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  php 三元运算符实例详细介绍  制作公司内部网站有哪些,内网如何建网站?  Laravel如何使用Blade模板引擎?(完整语法和示例)  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  北京专业网站制作设计师招聘,北京白云观官方网站?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  如何挑选最适合建站的高性能VPS主机?  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  青岛网站建设如何选择本地服务器?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  简单实现jsp分页  Laravel如何与Inertia.js和Vue/React构建现代单页应用  如何在 Pandas 中基于一列条件计算另一列的分组均值  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何用景安虚拟主机手机版绑定域名建站?  三星网站视频制作教程下载,三星w23网页如何全屏?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel如何实现用户密码重置功能?(完整流程代码)  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  详解jQuery停止动画——stop()方法的使用  高端云建站费用究竟需要多少预算?  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  如何快速生成高效建站系统源代码?  如何在IIS服务器上快速部署高效网站?