admin 发表于 2019-4-2 14:47:58

用openssl+libcurl编译出来的32位程序,release版本能正常运行...






问题描述:用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文件或者直接远程调试。


页: [1]
查看完整版本: 用openssl+libcurl编译出来的32位程序,release版本能正常运行...