vs下的输出目录/输出文件/工作目录-总结

vs下的输出目录/输出文件/工作目录-总结

一、vs解决方案下各文件夹的包含关系

vs解决方案下各文件夹的包含关系

一般来说,vs中的c++项目的解决方案总文件夹下包含解决方案配置文件sln和一个项目总文件夹和一个Debug文件夹以及一个Release文件夹(共四个文件夹,其中Debug和Release文件夹中存放最终生成的结果exe或dll如果不使用Release生成,则不存在Release文件夹)。

而解决方案和项目文件夹包含关系下包含C++源文件头文件、项目配置文件和一个Debug文件夹以及一个Release文件夹(注意,此处的Debug和Release文件夹仅仅存放中间编译结果obj,不存放exe和dll之类的东西如果不使用Release编译,则没有对应的Release文件夹)。

Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息

Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。Release模式下生成一个文件.exe或.dll文件

二、输出目录/输出文件/工作目录

1、输出目录-决定$(OutDir)

即设置了VS的“输出目录”属性就相当于设置了$(OutDir)的值。

如果我们建立一个默认的vc项目ssyy,他的默认“常规“栏目中,“输出目录”为$(SolutionDir)$(ConfigurationName),所以调试时会在解决方案文件夹下建立一个debug(ConfigurationName的值为debug)文件夹,并在此文件夹下生成 ssyy.lik链接器 和ssyy.exe文件(默认情况下) 。

默认“中间目录”为$(ConfigurationName),所以会在ssyy项目文件夹下(即ssyy.vcproj的项目配置文件所在位置)建立一个debug文件夹,并在该文件夹下生成ssyy.obj二进制文件。

默认“链接器”栏目下的“常规”选项下的“输出文件”选项为​$(OutDir)$(ProjectName).exe,其中$(OutDir)就已经在“常规”栏目的“输出目录”选项赋值了。

注意:实际上输出目录不决定输出exe文件的位置。

2、输出文件-决定$(TargetDir)

$(TargetDir)的值是在生成exe文件后自动赋予值为exe文件所在位置。所以可以说,“输出文件”最终决定exe文件所在的位置

默认情况下“输出目录”和“输出文件”两个属性对应的目录是一样的,这样用着方便(当然,输出文件的值在输出目录的值的基础上还包含有exe文件名)。如果两个不一样,则中间生成的链接器用的如xx.ilk和xx.pdb文件等在输出目录,而最终生成的xx.exe文件在“输出文件”属性设置的目录中。

当调试程序时,系统变量$(OutDir)的值是最先确定的,而$(TargetDir)和$(TargetPath)的值是在exe文件生成后才确定的。也就是说系统变量$(OutDir)的值由VS项目的“输出目录”属性决定,而$(TargetDir)和$(TargetPath)的值由VS项目的“输出文件”属性决定。

3、工作目录

“调试”栏目中的“工作目录”项,这个属性默认情况下是空的,但表示工作目录是工程目录,也就是工程配置文件ssyy.vcproj所在目录。

“工作目录”属性作用是程序运行后唯一识别的默认目录,即工作后只认识这个目录。

例如程序运行过程中生成一个txt文本文件,如果在创建文件过程中未指定绝对路径,只指定创建文件的文件名,那么这个文本文件默认就会建立在工作目录中,当然读取一些配置文件也在工作目录中查找,但要说明一下,生成的exe文件跟工作目录没任何关系,也不会放在工作目录中。总的来说,工作目录就是程序运行过程中默认读取的目录。

对工作目录的补充

vs中工作目录的设置是给调试用的,也即你启动调试后,启动一个新进程,自动把这个新进程的工作目录设置为vs项目属性中的工作目录,然后新进程启动对应的exe程序。

但是如果不使用vs的调试启动exe,而是直接双击exe文件启动一个新进程时,会自动把这个新进程的工作目录设置为exe文件所在的目录,这是和vs启动调试不同的地方。所以如果发布的时候不把工作目录内的东西拷到exe所在的目录内,就会运行出错,因为此时工作目录不再是vs中设置的了,而是exe文件所在的目录。

上面所说的“调试”是指vs下启动exe,包括debug模式和release模式,不要把调试就理解为只有debug模式。】

如果工程中用到的文件不在默认的工作目录下,而程序中又直接使用了相对路径,则应修改工作目录。

参考文档

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 如果在 `/usr/local/lib/engines-1.1/` 目录下没有 `gost.so` 文件,说明 SM2 模块没有正确安装。你可以通过以下步骤安装 SM2 模块: 1. 下载 OpenSSL GOST 引擎源码。可以从 OpenSSL 官网下载最新版本。 2. 解压源码文件。可以使用以下命令: ``` tar -zxvf openssl-gost-xx.tar.gz ``` 其中,xx 代表 OpenSSL GOST 引擎的版本号。 3. 进入源码目录,执行以下命令进行编译和安装: ``` ./config make make test make install ``` 这些命令会编译和安装 OpenSSL GOST 引擎,其中就包括了 SM2 模块。 4. 安装完成后,可以使用以下命令测试 SM2 加密和解密功能: ``` openssl sm2 -encrypt -in plain.txt -out cipher.txt -certfile sm2cert.pem openssl sm2 -decrypt -in cipher.txt -out plain.txt -keyform engine -engine gost ``` 这些命令会对 plain.txt 文件进行 SM2 加密,并将密文输出到 cipher.txt 文件中。然后,再对 cipher.txt 文件进行 SM2 解密,并将明文输出到 plain.txt 文件中。 如果还有问题,请详细描述你的操作步骤和错误提示,我会尽力帮助你解决问题。 ### 回答2: /usr/local/lib/engines-1.1目录下没有gost.so文件。这种情况可能有几种可能的原因。首先,gost.so文件可能不存在于该目录中。您可以通过检查该目录中的文件列表来确认是否确实缺少此文件。 其次,该文件可能已被移动或删除。您可以尝试搜索系统中是否存在其他目录中的gost.so文件。 另外,该文件可能是由某个软件包或库所提供的。如果您之前安装了与gost.so相关的软件包或库,可能需要重新安装或更新该软件包。 最后,如果您确定需要gost.so文件,而您的系统中确实没有该文件时,您可以尝试从可信的来源下载或获取该文件,并将其放置到/usr/local/lib/engines-1.1目录中。请确保从可信的来源获取文件,以避免安全风险。 总结起来,如果/usr/local/lib/engines-1.1目录下缺少gost.so文件,您可以检查文件是否存在于其他目录中,重新安装或更新相关软件包,或从可信的来源获取并放置该文件到该目录中。 ### 回答3: 在Linux系统中,/usr/local/lib/engines-1.1/路径是用于存放加密引擎模块的目录。根据问题描述,该目录下没有gost.so文件。这意味着在当前系统的加密引擎模块中未找到GOST算法的相关支持。 GOST是由俄罗斯开发的密码算法,常用于保障数据安全,特别是在俄罗斯及其周边地区被广泛使用。在Linux系统中,如果需要使用GOST算法进行加密操作,一般需要安装相应的GOST模块。 解决该问题的方法有以下几种: 1. 确认是否需要使用GOST算法。如果不需要使用GOST算法,可以忽略该问题。 2. 检查是否已安装了GOST模块。可以在系统的包管理器中查询相关的软件包,如gost-engine。 3. 如果未安装GOST模块,可以尝试通过源代码编译和安装GOST模块。可以从官方仓库或第三方源代码库获取相关的源代码,按照提供的说明进行编译和安装。 4. 如果以上方法都无效,可以尝试搜索其他第三方提供的GOST模块,并按照其文档进行安装。 总之,该问题是由于缺少GOST模块导致的,可以通过安装相应的模块解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值