[VS2017(14)] 创建Qt动态库项目[TZZ]
1、启动Visual Studio 2017软件,新建一个空白的解决方案项目;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/38332303bbea3e86a1f551f05cd4483105eb5510.jpg)
2、右键单击“解决方案solution1”,在弹出菜单中选择“添加 > 新建项目”;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/d695563104ebf6a7c8b2b298ffee1c324a184f10.jpg)
3、在弹出的“添加新项目窗口”中,选择Qt项目类别,然后在模板列表中选择“Qt Console Application”并点击“确定按钮”;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/4a594f2c8cf1d8a7b98e783746e34b2c57ee4710.jpg)
4、继续采用同样的方式,向解决方案中添加一个“Qt Class Library”项目。需要注意的是,在Qt类库向导中,不要勾选“Create Static (.lib)”,保证添加一个动态库项目;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/ba97ffd06de89a613f98712045e8b004551bad10.jpg)
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/b1454a1bd10ff226cd2701bd9c99e92abbb8a410.jpg)
5、打开QtSharedLibrary1项目中的QtSharedLibrary1的头文件和源文件,向其中添加一个sayHello方法,该方法负责输出“Hello Shared Lib!!!”字符串;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/16d8f72abab84240ac43f3a77ac595ee40c19e10.jpg)
6、将QtConsoleApplication1项目的依赖项指定为“QtSharedLibrary1”,这样每次编译“QtConsoleApplication1项目”时,总能保证先编译“QtSharedLibrary1项目”,从而让控制台项目每次引用的动态库都是最新版本的;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/94af5fc1b727ac53cb35a19f2ecadce891489910.jpg)
7、打开QtConsoleApplication1项目的属性页,将QtSharedLibrary1项目的相对目录添加到C/C++的附加包含目录中,这样可以在控制台项目中直接包含动态库项目的头文件;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/76b6860e5f20437188660693323acd8921c58f10.jpg)
8、继续将项目的输出目录添加到QtConsoleApplication1项目的“附加库目录”中。由于同一个解决方案下的所有项目会默认将生成文件放到以解决方案目录为起点的目录中,因此,在输出目录下可以找到动态库项目生成的动态库文件和链接静态库文件;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/8974c38a59de450769bc08c35e413a8ca7088510.jpg)
9、继续将动态库项目的链接库文件添加到QtConsoleApplication1项目的“附加依赖项”中,这样该项目编译时才能自动将动态库链接进去;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/95bd4e8c9bcec7f861ca6d6e034ce54a2e27fb10.jpg)
10、在QtConsoleApplication1项目的main函数中,添加实例化QtSharedLibrary1类并调用其sayHello方法的测试代码,然后调试运行程序。在弹出的控制台窗口中,可以见到输出的“Hello Shared Lib!!!”字符串;
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/e6ae36066b0192ddc7fd86401a87031c98c0f010.jpg)
![[VS2017(14)] 创建Qt动态库项目[TZZ]](https://exp-picture.cdn.bcebos.com/e0c73a2fa872941f405904697b5e4a237871e610.jpg)
11、最后总结说明一下,在VS2017项目中引用静态库和动态库,必须正确设置附加库的目录(即告诉编译器在哪些目录中查找附加依赖的静态库)和链接静态库的名称(即告诉编译器需要链接哪些静态库)。在VS2017中,通过链接静态库方式间接引用动态库是一种特别便利的方式,除非有特殊需求(比如隐藏DLL中的核心功能),否则没必要采用Windows API来加载动态库。Enjoy!