【高分求助】VC++ 2005写的win32控制台程序只能在自己的机子上运行????~!
我用VC++ 2005 做的win32 控制台应用程序,不管是生成的Debug版还是Release版的exe文件,都只能在我的机子上运行,一到别人的机子上点击打开就提示“由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”
奇怪的是我写的仅仅是简单的控制台程序,只有一个exe文件,又不是带一大堆dll文件的大软件,怎么还要安装??好奇怪。
是我的VC++的设置问题么?该怎么解决呢?
请熟悉的朋友指点一下。
问题点数:50、回复次数:68Top
1 楼owlling(owlman)回复于 2006-12-08 14:25:45 得分 0
这是自然的,c++程序是直接依赖于机器的。换了机器自然要重新编译,除非两台机器的配置完全相同还差不多。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
2 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-08 14:28:00 得分 0
但是以前写的一个程序却可以在别的机子上运行呀??
还有如果VC++真是这样,自己写的软件只能自己用,呢要它做什么呢???
哪位朋友给个解决方案,非常感谢。Top
3 楼owlling(owlman)回复于 2006-12-08 14:30:39 得分 0
在解决方案里见一个安装项目打包当前项目即可。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
4 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 14:32:24 得分 0
owlling(owlman)“c++程序是直接依赖于机器的。换了机器自然要重新编译,除非两台机器的配置完全相同还差不多”都从哪听说的?
默认编译的程序都需要C运行库的支持的,你得用静态连接。在编译选项里应该有。Top
5 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-08 14:35:10 得分 0
taodm(taodm)
默认编译的程序都需要C运行库的支持的,你得用静态连接。在编译选项里应该有。
--------------------------------------------------------------------------
感谢taodm(taodm)兄指点,我看看Top
6 楼owlling(owlman)回复于 2006-12-08 14:48:10 得分 0
这个还需要那儿听说么?c++程序要是能编译一次到处运行,java还能活么?
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
7 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 14:53:12 得分 0
哈哈哈,编译一次当然可以在同一个OS平台上跑啊。java是宣称跨平台跑。
Top
8 楼owlling(owlman)回复于 2006-12-08 14:56:37 得分 0
绝对不止是库的链接问题,特别是整数的长度、整数和浮点数的表示法和字节序;还有对齐等问题,你都能保证完全一致?
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
9 楼sinictao()回复于 2006-12-08 14:58:26 得分 0
用静态连接方式编译Top
10 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 14:58:50 得分 0
都是windows 2000/xp系统,还能不一致?
C/C++的程序要换台计算机就都不能用了,这2种语言还能活到现在?
你也搞笑了。Top
11 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-08 15:00:58 得分 0
找不到那个静态链接在哪里设置。
不过经过研究,在VC++ 2005 中写win32 控制台应用程序时只有创建一个 emptyproj 项目时生成的exe文件才能在别的机子上运行,不过建这种 emptyproj 项目有两个缺点:
1.不能调试。 2.生成的exe文件很大。
而创建 CLR空项目、CLR控制台应用程序、win32 控制台应用程序生成的exe文件均不能在别的机子上运行,而这几种项目生成的exe文件又比 emptyproj 项目的小很多。
狂晕~~~~~~~~~~~~
难道没有解决方法了么??Top
12 楼owlling(owlman)回复于 2006-12-08 15:04:13 得分 0
晕,c++的程序都需要本地安装的吧,直接拷贝了就能用?还我搞笑
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
13 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 15:07:30 得分 0
你为啥自己不写个小程序试一下?Top
14 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-08 15:13:52 得分 0
taodm(taodm)兄和owlling(owlman)兄就别吵了。大家整天见面呢,和气生财哈。反正都是切交流嘛,没什么的。
关于我的问题我在帖子里都说清楚了。事情就是这样的。
我也再研究下。
麻烦各位了。
如果有好的方法还请赐教哈。
非常感谢各位帮助~~~~~~~~~~
Top
15 楼owlling(owlman)回复于 2006-12-08 15:14:28 得分 0
哦,。我突然明白你的意思了,你一定要说跨机器就是x86的机器,没别的机器了,那我无话可说了。你静态链接完事吧。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
16 楼antonyhome(Linux C++)回复于 2006-12-08 15:28:56 得分 8
明白楼主的意思了,
楼主用的是CLR(Common Language Runtime),是.Net的东东,不是标准的win32程序
需要.net framework才能运行
创建项目时要选win32的,不是.Net的Top
17 楼owlling(owlman)回复于 2006-12-08 15:34:36 得分 8
另外,我补充下,我的笔记本是苹果的。台式机是x86的,虽然都是win xp系统,这样的移植显然是不行的
我再说一遍,c c++的可移植性是代码级的,不是二进制级别的,除非两个平台是完全兼容的,否则只是解决库的link问题是远远不够的,
java和c#是带vm机制的,才能做到这点
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
18 楼antonyhome(Linux C++)回复于 2006-12-08 15:34:44 得分 0
补充说明一下,如果没用到托管,用的是ISO C++ 建议创建win32 项目,
Microsoft的托管代码和ISO C++ 有冲突,记得CLR刚出来时,想把两个用在一起,
发现MS很不合作Top
19 楼antonyhome(Linux C++)回复于 2006-12-08 15:38:52 得分 0
owlling(owlman)
就算是苹果电脑,还是可以选择目标机器为I386,可以交叉生成可执行文件的
Top
20 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-08 15:41:08 得分 0
antonyhome(鲜の每日C)
明白楼主的意思了,
楼主用的是CLR(Common Language Runtime),是.Net的东东,不是标准的win32程序
需要.net framework才能运行
创建项目时要选win32的,不是.Net的
--------------------------------------------------------------------------
谢谢提醒,不过我创建的不是CLR项目,就是win32 项目呀,但就是一到别的机子上就不行。
还有我在上面的帖子上说的,经过研究,在VC++ 2005 中只有创建一个 emptyproj 项目时生成的exe文件才能在别的机子上运行。
而创建 CLR空项目、CLR控制台应用程序、win32 控制台应用程序生成的exe文件均不能在别的机子上运行。
好奇怪~~~~`
Top
21 楼owlling(owlman)回复于 2006-12-08 15:41:08 得分 0
是么?这个我倒是不知道,是否给点资料看看,
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
22 楼owlling(owlman)回复于 2006-12-08 15:43:52 得分 0
to,lz,你说明下, 这是两台怎么样的机器?cpu? 操作系统?还有是否都装系统 版本的。net框架?
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
23 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 15:44:03 得分 0
C#也不能跑linux下面呀。windows for x86和windows for ppc本来就是不同平台。Top
24 楼xlightx(小亮)回复于 2006-12-08 15:45:52 得分 0
不会和框架有关吧?.net framework 2.0,我不是很懂,呵呵。Top
25 楼owlling(owlman)回复于 2006-12-08 15:49:12 得分 0
和系统没关系,按你说的那种情况,只要是gcc编译器的东西,在两台都支持gcc的不同操作系统的相同指令集的机器上也是可以试试的
至于,net在linux上的情况么。你不知道mono项目么?
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
26 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 15:54:58 得分 10
windows和linux都支持gcc,都跑在x86CPU上,他们仍然是不同平台,编译出来的程序当然不可以跨平台运行。
mono算啥,wine/winx也可以让windows程序直接跑在linux上呢,这个讨论就没意义了。
C++之父早就说过了,java根本不是跨平台,而是它本身就是平台。Top
27 楼owlling(owlman)回复于 2006-12-08 15:57:07 得分 0
至于ls说到的框架问题,其实很显然的,你让小猫专大洞当然没问题,但是要反过来就未必了,不过lz这方面的问题的几率倒是不太会有的。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
28 楼TomMax(笑望人生)回复于 2006-12-08 16:00:59 得分 8
VC++2005与.net一样,必须要有一个运行库。但这个运行库不是.net运行库,而是专用的一个VC++2005运行库,只有2兆大。
下载地址:
http://www.microsoft.com/downloads/details.aspx?FamilyID=32BC1BEE-A3F9-4C13-9C99-220B62A191EE&displaylang=zh-cn
装上就好了。Top
29 楼antonyhome(Linux C++)回复于 2006-12-08 16:14:38 得分 0
应该是 TomMax(笑望人生) 所说的原因
不过,应该可以设置为静态的吧
楼主能不能把编译的参数贴出来看看Top
30 楼sgnaw(李逍遥)回复于 2006-12-08 16:54:53 得分 5
刚用 VS2005 新建了一个 Win32 Console 工程, 试了一下, 确实如楼主所说.
但是我找到了一个解决办法:
新建工程的时候, "项目类型"选择"Visual C++", 然后选择"空项目"
再把你的源程序加到工程中, 再编译出来的 Console 程序可以被别的 PC 使用.Top
31 楼sgnaw(李逍遥)回复于 2006-12-08 17:02:38 得分 0
你的程序应该不使用 MFC 吧 ?
所以, 静态链接之类的说法, 纯属胡扯 !
应该是其它编译选项问题, 有空我再研究一下.Top
32 楼sgnaw(李逍遥)回复于 2006-12-08 17:06:14 得分 0
居然有人说 CPU, X86 之类的话, 真是晕 .Top
33 楼owlling(owlman)回复于 2006-12-08 17:08:44 得分 0
c++的移植问题,谈cpu哪儿不对了 ?
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
34 楼horeaper()回复于 2006-12-08 17:08:52 得分 3
msvcr80.dll
msvcp80.dll
附带上这两个DLL再试试Top
35 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 17:10:48 得分 0
应该还是误建了“托管C++”工程,而其它机器没有.net支持库这类东西所致。Top
36 楼sgnaw(李逍遥)回复于 2006-12-08 17:14:31 得分 0
> c++的移植问题,谈cpu哪儿不对了 ?
---------------------------------------
因为就算 CPU 不一样, 这些差异由 OS 接管了, OS 完全可以让你的程序正常运行 .Top
37 楼sgnaw(李逍遥)回复于 2006-12-08 17:16:41 得分 0
> taodm(taodm) ( ) 信誉:100 Blog 2006-12-08 17:10:48
> ...而其它机器没有.net支持库这类东西所致
-------------------------------------------
VS2005 默认的 Win32 Console 工程不会包含 CLR 的支持, 所以, 不关 .NET 支持库的事.Top
38 楼owlling(owlman)回复于 2006-12-08 17:18:47 得分 0
因为就算 CPU 不一样, 这些差异由 OS 接管了, OS 完全可以让你的程序正常运行
_____________________
你到苹果机上试试吧,或者你到64位的机器上试试吧,相同的操作系统。。。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
39 楼sgnaw(李逍遥)回复于 2006-12-08 17:19:45 得分 0
> horeaper() ( ) 信誉:100 Blog 2006-12-08 17:08:52 得分: 0
>msvcr80.dll
>msvcp80.dll
>附带上这两个DLL再试试
-------------------------------------------
如果还要带上一堆 DLL, 还不如把这个 Console 程序拿到 VC++6 里编译一下来得方便.
VC++6 里的 Win32 Console 程序是没问题的.Top
40 楼sgnaw(李逍遥)回复于 2006-12-08 17:21:13 得分 0
>你到苹果机上试试吧,或者你到64位的机器上试试吧,相同的操作系统。。。
------------------------------
只要 Windows 支持苹果的 PC, 这根本不是问题.Top
41 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 17:21:36 得分 0
那么就这个2个dll了
msvcr80.dll
msvcp80.dll
Top
42 楼owlling(owlman)回复于 2006-12-08 17:22:05 得分 0
晕,要重新编译这个问题还用讨论么?
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
43 楼owlling(owlman)回复于 2006-12-08 17:23:34 得分 0
只要 Windows 支持苹果的 PC, 这根本不是问题
=========
windows没有苹果版的? 你没稿错吧你?
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
44 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 17:23:47 得分 0
VC++6 里的 Win32 Console 程序没问题是因为windows2000/xp已经自己带了
msvcr60.dll
msvcp60.dllTop
45 楼sgnaw(李逍遥)回复于 2006-12-08 17:25:45 得分 0
关键是觉着大家回答问题, 似乎喜欢没有根据的凭空猜测,
而楼主成了试验田, 试来试去都不行, 浪费时间, 这样很不好 .Top
46 楼taodm((不能收CSDN社区短信息,请莫浪费精力))回复于 2006-12-08 17:26:49 得分 0
sgnaw(李逍遥),一共就2种可能,是你在搞呀。Top
47 楼owlling(owlman)回复于 2006-12-08 17:29:11 得分 0
对阿,。要么是平台兼容问题(包括硬件,操作系统),。要么就是库的问题
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
48 楼sgnaw(李逍遥)回复于 2006-12-08 17:29:43 得分 0
> taodm(taodm) ( ) 信誉:100 Blog 2006-12-08 17:26:46 得分: 0
> sgnaw(李逍遥),一共就2种可能,是你在搞呀。
---------------------------------
不明白是什么意思哦, 我可不是马甲啊, 前日还有人以为我是袁峰老前辈.
Top
49 楼sgnaw(李逍遥)回复于 2006-12-08 17:32:15 得分 0
我查了一下修改 Win32 Console 的编译选项, 但目前还没有调好, 请参考下面的文章:
http://www.gamedev.net/community/forums/topic.asp?topic_id=423527
因为要拿到别的 PC 上测试, 不太方便.Top
50 楼antonyhome(Linux C++)回复于 2006-12-08 17:39:14 得分 0
因为我也没有vc++ 2005,所以只能跟据以前出现的经验来猜则是否 静态链接 或者 CLR 的问题
因为不知道vc++ 2005的默认纺译选项是怎么样的,所以叫楼主把编译选项贴出来以方便定位
相信大家都不是想把楼主拿来试验
Top
51 楼owlling(owlman)回复于 2006-12-08 17:40:36 得分 0
ls有没有个方向啊?lz没有说明两台怎么样的机器,怎么样的环境,你在哪写编译选项上下功夫啊?
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
52 楼antonyhome(Linux C++)回复于 2006-12-08 17:43:53 得分 0
sgnaw(李逍遥) 给的那个是预编译头的问题,连可执行程序都生成不了
这个是已经生成可执行程序了Top
53 楼owlling(owlman)回复于 2006-12-08 17:45:45 得分 0
晕,我也看了下那个文件,正想说这话,。。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
54 楼antonyhome(Linux C++)回复于 2006-12-08 17:46:55 得分 1
owlling(owlman)
楼主其实说明了在一些情况下的编译/链接选项可以运行
我们实际上是要找出VC++ 2005 默认选项与以前的有什么差别Top
55 楼owlling(owlman)回复于 2006-12-08 17:52:14 得分 0
哦,好像他说的是以前的一个项目吧,我认为lz还不至于会更改编译器的某些选项。我觉得他可能两次移植的目标机器是不同的,或者两次的程序涉及的运算啊库啊有所不同的。这只能猜测了。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
56 楼sgnaw(李逍遥)回复于 2006-12-08 18:05:17 得分 2
> antonyhome(鲜の每日C) ( ) 信誉:100 Blog 2006-12-08 17:46:55 得分: 0
> owlling(owlman)
> 楼主其实说明了在一些情况下的编译/链接选项可以运行
>我们实际上是要找出VC++ 2005 默认选项与以前的有什么差别
---------------------------------------
OK, 这个说法是正确的 , 大家继续, 不打绕了 .Top
57 楼sgnaw(李逍遥)回复于 2006-12-08 18:11:43 得分 0
下班了, 准备打乒乓球去了, 大家要注意保持身体健康哦.
bye ...Top
58 楼owlling(owlman)回复于 2006-12-08 18:19:00 得分 0
hoho,。ls真够胡搞的。。。。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
59 楼pass86(l.jay)回复于 2006-12-08 18:22:42 得分 0
可移植和跨平台是不一样的啊,
搂主的问题估计是链接库的问题,就如静态链接和动态链接,动态链接就需要库(如.dll)的支持,所以拿别机器上可能不一定运行。
Top
60 楼owlling(owlman)回复于 2006-12-08 18:28:23 得分 0
可移植和跨平台的概念就不要争论了,见仁见智吧、。估计lz也只能是x86的windows环境。
==================================
欢迎访问我的个人主页:http://www.lingjie.net/
==================================Top
61 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-08 21:42:32 得分 0
非常感谢各位热心帮助和提示。
晚上有点事,现在才回来。
等我先看看各位的留言再说哈。
再次感谢各位!
--------------------------------
郁闷的是VC+ 2005的设置项太多了,具体都不知道啥意思,一不小心就编译不了了。
偶刚学VC++,还不太会用呢。Top
62 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-08 21:49:51 得分 0
antonyhome(鲜の每日C)
应该是 TomMax(笑望人生) 所说的原因
不过,应该可以设置为静态的吧
楼主能不能把编译的参数贴出来看看
--------------------------------------------
感谢各位帮忙,这是我的编译信息。
------ 已启动全部重新生成: 项目: 梦幻情缘5.0, 配置: Debug Win32 ------
正在删除项目“梦幻情缘5.0”(配置“Debug|Win32”)的中间文件和输出文件
正在编译...
love5.0.cpp
.\love5.0.cpp(68) : warning C4996: “strcpy”被声明为否决的
C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(73) : 参见“strcpy”的声明
消息:“This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”
.\love5.0.cpp(72) : warning C4996: “strcpy”被声明为否决的
C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(73) : 参见“strcpy”的声明
消息:“This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”
.\love5.0.cpp(182) : warning C4996: “fopen”被声明为否决的
C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(234) : 参见“fopen”的声明
消息:“This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.”
正在链接...
正在嵌入清单...
生成日志保存在“file://c:\Documents and Settings\lei\My Documents\Visual Studio 2005\Projects\梦幻情缘5.0\梦幻情缘5.0\Debug\BuildLog.htm”
梦幻情缘5.0 - 0 个错误,3 个警告
========== 全部重新生成: 1 已成功, 0 已失败, 0 已跳过 ==========
------------------------------------------------------------------------
有三个警告,但是也没有问题呀,程序运行也没有问题呀
就是在别的机子上不行。
Top
63 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-08 22:03:31 得分 0
鉴于朋友们对我的无私帮忙,特意从偶那可怜的430总分里再拿30分出来感谢朋友们。
现在我把软件的所有源代码下载链接贴出来。请朋友们看看。地址是我在blogbus的空间。
http://alxen.blogbus.com/files/1165586132.rar
-------------------------------------
这本来是我最初发表在电脑爱好者论坛的文章,最初是用TC 2.0做的英文版1.0的,现在逐步做到了5.0中文版,用VC++ 2005编译。
本着交流学习的目的和大家分享。
这个下载链接包含了5.0中文版的全部源代码。
里面包含的exe文件是在VC++ 2005里创建的 emptyproj 项目里生成的。所以可以在别的机子上运行的。
不过在win32 控制台项目里生成的exe文件就不能在别的机子上运行了。
感谢朋友们不吝赐教。
Top
64 楼htqx(航天奇侠)回复于 2006-12-09 12:31:10 得分 5
大家看来没有使用vc++2005呢。
vc++2005 使用xml定位dll技术,在一个系统中可以保留相同的dll的不同版本。只是,生成程序的时候,如果要在别人的机子上运行,就要拷贝相关的dll,而且拷贝的原则有点特别。
目录结构是这样的:
--我的程序.exe
--我的程序.manifest
--我使用的dll
-----我使用的dll.dll
-----我使用的dll.manifest
manifest就是xml定位文件,默认是直接内嵌入程序里面的。
当然最简单的发布方法就是设置静态连接标准库dll。
项目属性 --> c/c++ --> 代码生成 --> 运行时库
1。多线程(/MT) //静态
2。多线程调试(/MTd) //静态
3。多线程 DLL (/MD)
4。多线程调试 DLL (/MDd)
单个程序文件虽然增大,但是比拷贝几个dll要小得多,方便传播。
Top
65 楼htqx(航天奇侠)回复于 2006-12-09 12:34:23 得分 0
关于设置的东西,最好参考msdn,里面都有详细的介绍。
大家似乎都懒得看帮助呢。
Top
66 楼shunan(什么是技术)回复于 2006-12-09 12:52:56 得分 0
so hot!
mark itTop
67 楼alxen(小雨--我只喜欢雨~~~)回复于 2006-12-09 12:59:01 得分 0
htqx(航天奇侠)
当然最简单的发布方法就是设置静态连接标准库dll。
项目属性 --> c/c++ --> 代码生成 --> 运行时库
1。多线程(/MT) //静态
2。多线程调试(/MTd) //静态
3。多线程 DLL (/MD)
4。多线程调试 DLL (/MDd)
单个程序文件虽然增大,但是比拷贝几个dll要小得多,方便传播。
--------------------------------------------------------------
先谢了,我试试哈。Top
68 楼txdog(000010 000101 000000)回复于 2006-12-09 13:58:48 得分 0
恩,看来基础很重要,浮躁不得。我什么都不希望,只是希望50岁了还能编程。Top




