静态编译的win32能否在没有运行库的机子上运行? 我用VC2008编写了一个小win32程序,编译Release版是55K,使用depends查看,发现需要用到user32.dll,kernel32.dll,shell32.dll,MSVCR90.dll;然后我静态编译成87K,使用depends查看,程序用到user32.dll,kernel32.dll,shell32.dll。请问这样一个程序在没有VC运行库的机子上能否运行?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 VC运行库没必要,但所需的DLL是必须的。因为那是你接口功能函数存在滴地方。当然,user32.dll,kernel32.dll,shell32.dll这三个WIN平台都有的。其他的就很难说了 Win32 SDK程序不用带运行库的,肯定可以用。 这些DLL里,MSVCR90.DLL是VC的运行时库,就是说9.0版的运行时库,这个不一定对方系统有的,其他都是系统自带的,静态编译也不能保证就能在对方机器上运行。简单说下为什么:1.首先是动态编译,VC的编译器会编译你的源码,但是比如你使用了MFC等,他会动态调用 mfc90.dll 这个根据你MFC版本而定。如果是 win32程序,就不会有mfcXX.dll 但是如果你用了C的运行时库,会有 msvcrtXX.dll 这些库,一般如XP自带了6.0的 msvcrt.dll 但是9.0应该是2008的,这个就要看对方是否以前安装过2008的运行时库了。2.静态编译,静态编译以后不会又 mfcXX.dll 他会静态编译到应用程序里,但是应用程序会变得很大。一般都在几百K左右(MFC程序)。3.静态编译+多线程(/MT)参数,这个才是关键。在项目属性-》编译器-》代码生成里,有个运行时库的选项,一般为多线程DLL(/MD),这里改成多线程(/MT)就不会有 msvcrXXX.dll 了,但是体积进一步增大。另外有些优化方法可以减小体积,例如使用 lstrlen lstrcpy 这些被 kernel32.dll 导出的函数。另外VC6有个精简的RTL库,Google一下你就知道。 大神救救我啊,搞了一天了 蛋都碎了 程序先前可以利用图像控件加载位图,随着程序的运行,位图无法加载了,怎么回事?如何解决? 串口通信程序的问题! 如何知道串口有程序在通讯 关于C++Test 我的疑惑:为什么我在窗体设计时,拖动一个Picture控件然后在放置一些Button ,为什么有些Button看得见有些看不见怎么回事? 一个奇怪的vc++问题 求高手赐教为何MFC在程序运行过程中关闭窗口程序就会崩溃 vs2013有自带的activex调试容器吗 请问,VxD是不是不能在win2k/nt下运行??谢谢! ctreectrl与clistctrl实现资源管理器, vc写的控件如何显示字符串
当然,user32.dll,kernel32.dll,shell32.dll这三个WIN平台都有的。其他的就很难说了
这些DLL里,MSVCR90.DLL是VC的运行时库,就是说9.0版的运行时库,这个不一定对方系统有的,其他都是系统自带的,静态编译也不能保证就能在对方机器上运行。简单说下为什么:1.首先是动态编译,VC的编译器会编译你的源码,但是比如你使用了MFC等,他会动态调用 mfc90.dll 这个根据你MFC版本而定。如果是 win32程序,就不会有mfcXX.dll 但是如果你用了C的运行时库,会有 msvcrtXX.dll 这些库,一般如XP自带了6.0的 msvcrt.dll 但是9.0应该是2008的,这个就要看对方是否以前安装过2008的运行时库了。2.静态编译,静态编译以后不会又 mfcXX.dll 他会静态编译到应用程序里,但是应用程序会变得很大。一般都在几百K左右(MFC程序)。3.静态编译+多线程(/MT)参数,这个才是关键。在项目属性-》编译器-》代码生成里,有个运行时库的选项,一般为多线程DLL(/MD),这里改成多线程(/MT)就不会有 msvcrXXX.dll 了,但是体积进一步增大。另外有些优化方法可以减小体积,例如使用 lstrlen lstrcpy 这些被 kernel32.dll 导出的函数。另外VC6有个精简的RTL库,Google一下你就知道。