C&C++搭建环境——微软IDE:Visual Studio

此款IDE在windows桌面平台非常好用,集合了编译器连接器和调试器,支持git扩展。更重要的是,社区版面对个人和开源项目是免费的,如下所示,一下简称VS。
这里写图片描述

授权方式是安装完Visual Studio登录微软账号授权即可,如下所示。
这里写图片描述

下载安装

到微软官网下载安装包,根据实际需求安装,如下所示。
这里写图片描述
这里写图片描述

安装完后登录微软账号授权即可使用如下所示。
这里写图片描述

界面设置

编译快捷键
工具—>选项—>键盘
项目编译,全编译如下所示。
这里写图片描述
这里写图片描述

安装插件

安装tomato插件
工具—>扩展与更新,搜索tomato,如下所示
这里写图片描述

新建工程

由于编译器的不同,需要新建VS工程,新建的工程可以在源工程文件目录下,不影响源代码。
如下所示,这是一个git+MinGW搭建的windows项目
这里写图片描述

新建工程项目

打开VS,文件—>新建—>项目,如下所示。
这里写图片描述

新建的项目放置在源代码文件夹下,如下所示。
这里写图片描述

扫描二维码关注公众号,回复: 3503405 查看本文章

添加工程源码

删除新建工程后的示例文件,记住在属性项目属性选项中删除预编译头文件,如下所示。
这里写图片描述

在git过滤中添加过滤Debug文件
.gitignore

.vs/
Debug/
x64/

将源码加入工程中,按照现有的工程结构分类,如下所示。
这里写图片描述
这里写图片描述

设置工程头文件

在项目属性选项中,将源码的头文件包含进工程中,如下所示。
这里写图片描述

编译与运行项目

代码由于编译器的不同需要进行修改。

1、VS对GCC的标识符不支持,如下所示,不支持_attribute_ 机制
这里写图片描述

修改方法:
使用以下对齐方式

#pragma pack(4) //添加对齐方式
#pragma pack()  //回复对齐状态

2、VS需要更高的安全函数,如下所示,GCC下使用sprintf编译没有问题,但用到VS2017就会报错,提示使用更安全的sprintf_s。
这里写图片描述

修改方法:
1、 换成更安全的sprintf_s函数,但因为GCC不支持,在linux下无法使用,失去代码的可移植性。
2、 换成标准函数snprintf,VS和GCC都支持。

编译成功,代码在GCC也能使用,如下所示。
这里写图片描述

改变工程文件输出位置

在工程属性—>常规中设置,如下所示

编译库文件

VS2017编译的静态库后缀为.lib,动态库文件后缀为.dll。

编译静态库

在整个解决方案中新建一个工程
这里写图片描述
选择编译成静态库,如下所示。
这里写图片描述

同样删除示例文件和去掉预编译头文件,将源码以及头文件包含进来,如下所示。
这里写图片描述
这里写图片描述

添加完代码后的结构如下所示。
这里写图片描述

编译成功,如下所示。
这里写图片描述

编译动态库

方法和编译成静态库一样,新建的工程为动态库工程。
也可以修改静态库的工程,输出更改成动态库,如下所示。
这里写图片描述

编译成功,如下所示。
这里写图片描述

源文件引用动态库进行编译时需要添加这个动态库的lib导入库,不然会导致无法连接解析库文件,如下所示。
这里写图片描述

为需要导出的函数添加VS的关键字描述:__declspec(dllimport)

#ifdef __cplusplus   
extern "C" {
#endif


#ifndef OBJ_DLL_API

#ifdef _WIN32
#define OBJ_DLL_API __declspec(dllimport)
#else
#define OBJ_DLL_API
#endif

#endif


OBJ_DLL_API int open_module1_func(void);
OBJ_DLL_API int open_module2_func(void);


#ifdef __cplusplus
}
#endif

通过宏_WIN32控制程序,使代码可以移植到Linux下。
编译成功,如下所示,输出路径已经改变。
这里写图片描述

改变库文件输出位置

在工程属性—>常规中设置,如下所示
这里写图片描述

静态库的lib与动态库的lib对比

动态库的lib文件比静态库的文件小,如下所示。
这里写图片描述
这里写图片描述

之后过程输出的静态库和动态库都放到工程文件的输出文件夹中。

库文件的引用

添加库的头文件

由于是在不同的项目中,因此需要引用库文件的工程添加库文件的头文件,如下所示。
这里写图片描述

解决方案内直接引用工程

若库文件工程就在解决方案中,直接引用该项目工程即可,如下所示。
这里写图片描述

编译成功,如下所示。
这里写图片描述

工程配置引用库文件

添加库目录

这里写图片描述

这里写图片描述

若引用外部的dll,下章描述需要添加dll的环境。
编译成功,如下所示
这里写图片描述

动态库的引用

以上示例适合引用静态库,动态库的引用需要多一步,将动态库dll的输出文件与工程文件exe的输出文件放置在同一级别文件夹下。

调试模式设置环境变量

借助VS编译工具调试器,可以指定dll的路径,即dll放置在指定文件夹下,通过配置VS工具调试器的运行环境达到调用dll的效果。

若没有改变库文件的输出位置到解决方案指定的输出目录obj下,没有配置环境会导致程序找不到dll,如下所示。
这里写图片描述

VS调试器引用dll路径,如下所示。
输入形式:PATH=dll路径;
多个路径用英文的“;”间隔。
这里写图片描述
这里写图片描述

运行模式设置环境变量

运行模式是指程序编译好后不依赖VS工程启动,直接运行exe文件,这时就用不了VS调试模式配置的环境变量,只能用电脑的环境变量或直接调用exe同级目录下的dll。没有配置环境会导致程序找不到dll,如下所示。
这里写图片描述

解决方法:
1、 直接将dll放到exe文件夹下。
2、 将dll路径加载到电脑的环境变量Path中。

应要程序去适应电脑,所以直接将dll放到exe执行程序下,运行如下所示。
直接运行exe程序需要在main函数末尾加上while(1);
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zxng_work/article/details/78597371