• 技术文章 >后端开发 >C#.Net教程

    VS2017完成静态库的搭建

    Y2JY2J2017-05-12 10:13:10原创3050
    这篇文章主要为大家详细介绍了Visual Studio2017写静态库的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

    php入门到就业线上直播课:进入学习

    类型选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中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:Visual Studio 2017 静态库
    上一篇:.NET实现邮件发送的代码详解 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• c语言中源文件编译后生成什么文件• c语言标识符有哪些类型• C#中GDI+编程10个基本技巧二• ASP.NET使用Ajax如何返回Json对象的方法具体介绍• 应用绝对路径与相对路径
    1/1

    PHP中文网