|
问题描述:用openssl+libcurl编译出来的32位程序,release版本能正常运行,debug版为什么会调到 SysWOW64文件夹里面的库?如果 SysWOW64里面有相应的库倒没事,关键是很多用户是没有的
回答解析:
SysWOW64 是64位系统运行32位程序用的,户电脑上一般不会有debug的库啊
release版本就不依赖SysWOW64里的,但debug就依赖,肯定依赖吧,除非当前目录下已经有这个库了。
msvcr120d.dll 这个库,在release运行时,删掉照样能正常运行。但是在debug运行时,删掉这个库,就报缺少msvcr120d.dll
这个是debug 运行时库,删了肯定不行啊
主要是,他怎么依赖到syswow里去了,32位程序,system32里面,不是有同名的库吗?
所有的lib、dll、exe都编译为静态,就不会依赖这些msvcr*.dll了。
system32就是64位系统的文件, 至于为什么有个32, 估计是历史原因. 就像int在64位程序里面也是32位的
System32代表当前系统 32位操作系统就是32位 64位操作系统就是64位 64位操作系统会额外有一个syswow64的文件夹 这个文件夹的全名是 windows on windows64意思是 在64位操作系统中的32位操作系统 用来处理32位的程序运行 一般相应的操作系统都会带有一部分运行库 根据系统的不同自带的运行库版本也不尽相同 但可以确定的是全部为release 版本的 编译出来的debug 程序不经过特殊处理是无法直接运行的 安装编译器的时候会自带debug运行库 所以在开发机器上不会有问题 具体位置在 vs在安装目录下的vc文件夹里的crt目录里 在客户机上 debug 程序需要装debug 运行库 或者编译的时候将运行库编译进去。
一般发布出去的程序都是编译release 版本的 即使需要调试也可以把release 的编译时的优化关掉 把pdb打开 然后产生dump文件或者直接远程调试。
|
|