VS2017完成静态库的搭建
这篇文章主要为大家详细介绍了Visual Studio2017写静态库的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
造轮子是一件有趣的事情,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。
【相关推荐】
1. ASP免费视频教程
2. ASP教程
3. 李炎恢ASP基础视频教程
以上是VS2017完成静态库的搭建的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Windows11引入了更多macOS风格的UI元素。您将获得重新设计的任务栏,开始菜单位于中心。是的,您可以更改它的位置,但默认情况下,它将放置在中心。控制中心还进行了一些设计调整。在下一次更新中,对Android应用程序的支持也将与重新设计的记事本和媒体播放器一起提供。尽管所有这些功能都使Windows11比Windows10有了不错的升级,但用户的脑海中正在酝酿某些疑虑。有一部分用户和开发人员担心Windows11是否会支持遗留应用程序和技术,无论是否落后。由于V

VCRUNTIME140.dllismissing错误是您在Windows上的VisualC++Redistributable文件存在问题。您可以使用本教程解决问题。Windows应用程序和软件需要DLL文件才能运行——没有它们,它们可能会完全停止工作。例如,如果您看到VCRUNTIME140.dllismissing错误,这表明您的PC缺少此文件,从而阻止应用程序启动。这可能是由于应用程序安装不成功。它甚至可以在运行Windows更新后出现。值得庆幸的是,您可以很容易

如此多的用户报告说,每当他们尝试运行应用程序时,它都会抛出一条错误消息,指出代码执行无法继续,因为未找到CONCRT140.dll。在打开Adobe应用程序、Halo、ForzaHorizon5等时,您可能会遇到找不到CONCRT140.dll。因此,这不是特定于某个应用程序的问题。如果没有安装正确的DLL,应用程序将无法正常工作,因为它们的代码依赖于这些库中编写的代码。在本文中,我们将了解CONCRT140.dll是什么以及它丢失的原因,以及我们如何下载它并修复错误。什么是

MicrosoftVisualC++已成为运行大多数常见应用程序所需的Windows操作系统的组成部分。现在,一些用户最近抱怨他们在尝试安装VisualC++RedistributablePackagesfor2015或MicrosoftVisualStudioRedistributablePackagesfor2013时遇到的问题。根据这些用户的说法,安装程序中途停止并显示“0x80240017-未指定错误”.这次失败的背后可能有很多原因。因此,不要在此

1.build.gradle配置(增加)dependencies{implementation'com.squareup.okhttp3:okhttp:4.9.0'implementation'org.conscrypt:conscrypt-android:2.5.1'}2.AndroidManifest.xml配置权限在application里面添加android:usesCleartextTraffic="true&q

微软 已宣布Visual Studio 2022 for Mac 17.0的一般版本。它带来了巨大的变化,包括原生 macOS UI 和对 Apple Silicon 处理器的支持。据该公司称,它还发布了一个新的预览版,您可以与此版本并排安装。在旧版本的 Visual Studio for Mac 中,Microsoft使用了各种 UI 技术,这让事情看起来格格不入。此更新使用

微软发布了VisualStudio202217.3。此更新带来了对.NET多平台应用程序UI(.NETMAUI)的支持、为MicrosoftTeams开发应用程序的能力、C++改进、Azure容器应用程序以及改进的LiveUnitTesting。您可以通过打开VisualStudio中的帮助>新增功能来查看新功能的完整列表。此更新中的主要功能是.NETMAUI已从预览支持中毕业,现在可在Windows上的VisualStudio2022

环境androidstudio版本:3.6.1gradle版本:5.6.4gradle插件版本:3.6.1错误提示11:41:35PM:Executingtask'TxtUtil.main()'...Executingtasks:[TxtUtil.main()]inproject/Users/tinytongtong/Documents/workspace/as/self/BlogDemoFAILURE:Buildfailedwithanexception.*Wh
