呵呵,楼上这位大侠真是有点不负责,您有没有自己试过呢?Win32程序如果设成Use MFC in a Static Library,编译没问题,链接的时候会出一堆错误。没有AfxXXX.h一系列的头文件,是不能用Use MFC in a Static Library的。我也不太清楚这个问题如何解决,你可以先设成工程Release试试,如果不可以的话,只好找找这些dll了,VC里有个叫Depends的小工具,可以很快的完成这个任务。我看了一下,Win32项目只用到了USER32.DLL和KERNEL32.DLL,这个是系统自已就带有的,所以我认为根本就不用拷出来,Win32程序就可以在没有VC的机器上运行。我这没有不带VC的机器,所以没法试,LZ可以自己试一下。当然前提是你没有用别的如GDI+或者D3D这些“高级”玩意儿。
呵呵,楼上这位大侠真是有点不负责,您有没有自己试过呢?Win32程序如果设成Use MFC in a Static Library,编译没问题,链接的时候会出一堆错误。没有AfxXXX.h一系列的头文件,是不能用Use MFC in a Static Library的。======================== 呵呵,不是不能,是你不会吧另外,你如果都没用mfc的话,可以选有个windows静态库的选项的 为什么一定要选mfc 静态呢而且控制台都可以使用mfc吧? 只要你设置得当
我早就试过了。在project->settings->general->microsoft foundation classes 里只有三个选项 not using mfc,use mfc in static library,use mfc in a shared dll,如果选use mfc in static library的话是根本无法正常链接的。 to草莓猪,既然我要用静态链接,自然是因为要用别的dll啊,我现在就是在用directx9啊.
xyxfly(小虾米 (本命年Happy, Day Day Up!)) 呵呵,不是不能,是你不会吧另外,你如果都没用mfc的话,可以选有个windows静态库的选项的 为什么一定要选mfc 静态呢而且控制台都可以使用mfc吧? 只要你设置得当 ================================================================================= 我的确不知道如何设置这个windows静态库,不知道应该在哪设置。照你在二楼所说的工程--〉设置 或者alt+f7常规 --〉microsoft基础类没有找到您说的这个"microsoft基础类",VC6和2005我都找了一遍,没看到您说的这个选项。麻烦您再给说清楚些好吗?
to qqwwing(草莓猪) ( ) ======================================= vs.net 2003 Use Standard Windows Libraries======================================= to Hermisky() ( ) 你这种情况打包发行吧,有些是没办法不带上dll的,比如,你自己写个dll。你在程序中使用了这个dll的话,这时当然不可能脱离这个dll而发行你的程序
to xyxfly(小虾米 (本命年Happy, Day Day Up!)) 我的是2005,因为是中文版,所以刚没有注意到。你说的Use Standard Windows Libraries中文版里是使用标准windows库,我认为它对应VC6的就是No Using MFC。它并不是静态链接,如我前面说的,它用的是Windows自带的DLL。编译出来的程序可以直接在没有装VC的机器上用。
你搜索一下程序打包发布不用你自己一个一个dll去挑啊,可以自动打包进去的(将需要用到的dll)
谢谢楼上诸位,不过DirectX并不是我要讨论的问题。我所需要知道的是在VC里如何静态链接编译。
To Hermisky() 我试过了,Win32工作区出来的程序可以直接在别的没有装VC的机子上用。至于D3D的动态链接库,你只能拷出来附着程序一起,其实Depends 这个小工具很好用,而且用到的DLL也不是很多,我把我用到的列出来给你作一个参考 d3dx9_30.dll d3d8thk.dll d3d9.dll 我只用到了这三个,程序就可以在别的机器上运行了。关键是这个d3dx9_30.dll。 PS:我用的是2006年4月的SDK
通过菜单中的"工程"->"设置","General"选项卡中"Microsoft Foundation Classes:"下拉选择"Use MFC in a Static Library",这样,就可以设置为使用静态链接库了.
如果选择use MFC in a Shared DLL 的话,你编译后的程序中不包含MFC库,所以文件会比较小,但是如果你的程序直接移到一个没有安装过MFC的机器上时,可能会导致找不到MFC的DLL。 如果选择Use MFC in a Static Library ,那你编译后的程序就直接包含了调用MFC的部分的库,文件可能会大一些,但是可以直接移到其他机器上运行。 前者是静态链接,发布不用带MFC的DLL文件。 后者是动态连接,发布要带MFC得DLL文件。如果可执行文件只有一个,使用前者,执行速度快,但文件比较大。 如果可执行文件多个,使用后者,因为DLL文件是共享的,所以文件体积总量减少。 单个文件也小。加载执行块,但运行速度略比前者慢。 used in a static library: 使用lib文件。lib是已经编译好的二进制文件,可以与你的工程静态链接起来成为一个exe。 used in a shared dll: 使用dll文件,函数实现隐藏在DLL文件内部,你的工程编译成exe文件后,运行时才调用dll 。
呵呵,不是不能,是你不会吧另外,你如果都没用mfc的话,可以选有个windows静态库的选项的
为什么一定要选mfc 静态呢而且控制台都可以使用mfc吧? 只要你设置得当
not using mfc,use mfc in static library,use mfc in a shared dll,如果选use mfc in static library的话是根本无法正常链接的。
to草莓猪,既然我要用静态链接,自然是因为要用别的dll啊,我现在就是在用directx9啊.
为什么一定要选mfc 静态呢而且控制台都可以使用mfc吧? 只要你设置得当
=================================================================================
我的确不知道如何设置这个windows静态库,不知道应该在哪设置。照你在二楼所说的工程--〉设置 或者alt+f7常规 --〉microsoft基础类没有找到您说的这个"microsoft基础类",VC6和2005我都找了一遍,没看到您说的这个选项。麻烦您再给说清楚些好吗?
你用的directx的那些dll你没法静态链接的啊
=======================================
vs.net 2003 Use Standard Windows Libraries=======================================
to Hermisky() ( )
你这种情况打包发行吧,有些是没办法不带上dll的,比如,你自己写个dll。你在程序中使用了这个dll的话,这时当然不可能脱离这个dll而发行你的程序
------------------------------------------------------------------------------------
我也在用DirectX,不过我用的MFC,我只能对你说,即使我使用静态链接,在没有装DirectX9 SDK的机器上,它还是会提示你缺少d3d9_XX.dll。注意这里是指SDK,它的DLL比较新,如果你机器里没有装与之相配的的DirectX9(DirectX9本身也有很多版本),程序还是不好用的。
d3dx9_30.dll
d3d8thk.dll
d3d9.dll
我只用到了这三个,程序就可以在别的机器上运行了。关键是这个d3dx9_30.dll。
PS:我用的是2006年4月的SDK
不过这些都不重要。
我现在只想知道在vc里如何静态链接编译,我只想知道这个而已。
你不应该试图发布Windows系统文件。Windows的系统文件保护功能会阻止安装程序替换这样的文件。正确的方法是从微软下载服务包安装程序。
我只是想知道 -VC里如何静态链接编译- , 仅此而已 啊。。我要崩溃了。。
一般是使用NO USING MFC
对链接来讲 使用#pragma comment(lib,”d3dx9.lib“)
据我所致 好像DX的Dll不能被程序集成ps:
如果可以的话,我们玩游戏就不用有时候需要另外安装DX9.0C了
user32.dll gdi32.dll……这类东西不能让您静态连接的。
如果选择use MFC in a Shared DLL 的话,你编译后的程序中不包含MFC库,所以文件会比较小,但是如果你的程序直接移到一个没有安装过MFC的机器上时,可能会导致找不到MFC的DLL。
如果选择Use MFC in a Static Library ,那你编译后的程序就直接包含了调用MFC的部分的库,文件可能会大一些,但是可以直接移到其他机器上运行。
前者是静态链接,发布不用带MFC的DLL文件。
后者是动态连接,发布要带MFC得DLL文件。如果可执行文件只有一个,使用前者,执行速度快,但文件比较大。
如果可执行文件多个,使用后者,因为DLL文件是共享的,所以文件体积总量减少。
单个文件也小。加载执行块,但运行速度略比前者慢。
used in a static library:
使用lib文件。lib是已经编译好的二进制文件,可以与你的工程静态链接起来成为一个exe。
used in a shared dll:
使用dll文件,函数实现隐藏在DLL文件内部,你的工程编译成exe文件后,运行时才调用dll 。
Debug和Release版本:
他们主要的不同点就在于Debug版本生成的exe中包含很多调试信息,Release版本没包含,并且,Release版本的代码是作了编译优化的. 所以,如果你的一个程序调试完毕可以发布时,请使用release版本生成exe. 当然release版本和debug版本的使用静态连接库要分别设置,如果release版本使用动态库的话,在没装VC的机子一般也运行不了. Release版本和Debug版本的设置方式是一样的.只是在"General"选项卡左边有一个Settings for的下拉,就是选择设置版本的.
如果还是不行的话, ... 那或者是否需要写一个专门的二进制代码连接器来?