用vc++编程在Windows外运行

Programming in VC++ to run outside Windows

本文关键字:运行 Windows vc++ 编程      更新时间:2023-10-16

我有以下关于vc++ 2008编程的问题

  1. 如果我在Windows 7中制作Win32控制台程序,它将在任何低于7的Windows中工作吗?
  2. 我可以做一个独立于。net框架的c++应用程序吗?如果是,请告诉我怎么做。
  3. 我可以让vc++中的应用程序在其他操作系统上运行,如Linux,只要它可以运行。exe文件?如果是,请告诉我怎么做。

我正在学习vc++,只是想弄清楚有关的疑问。希望他们能尽快被清除!

提前感谢欢呼声

1>视情况而定:如果不使用任何Windows 7特定的API,在Windows Vista上运行程序将没有问题;如果你不使用任何Vista特有的API,那么在XP等系统上运行它是没有问题的。

2>当然,你只需要做一个本地项目,而不是c++/CLI项目

3>你需要一个像"wine"这样的模拟器来运行linux下的windows可执行文件

大多数情况下…但是请记住:

如果你想在没有。net框架的情况下编程,在创建新项目时选择任何"Visual c++"项目-但不要使用任何CLR项目。

本地c++应用程序(控制台或窗口)可以在旧的Windows操作系统上运行,只要你不链接只有在新操作系统中可用的函数调用或api。例如,不要调用StgMakeUniqueName就指望你的应用能在Windows XP上运行。但是,让一个在Win7上运行的最新版本的Visual c++上编译的控制台C/c++应用程序生成在XP上运行的exe是相当容易的。

我相信你可以通过使用_WINNT_WIN32定义来防止意外使用新的api。

Windows上的本地c++应用程序的另一个考虑是,默认情况下,Visual c++将选择动态链接来包含C- runtime(例如msvcrt100.dll)。这些dll在您复制EXE到的机器上并不总是可用的。当您在另一台计算机上运行EXE时,您可能会得到一个关于无法找到MSVCRT*.dll的应用程序错误。如果发生这种情况,您可以在项目设置中切换到静态链接(然后只需将EXE直接复制到其他机器上),或者在您想要运行EXE的其他计算机上预安装适当的MSVCRT。Visual Studio将MSVCRT作为其自身设置的一部分预先安装。并且Visual Studio附带了用于安装MSVCRT的MSI文件,您可以重新分发这些文件。EXE的调试版本可能需要将MSVCRT dll的调试版本手动复制到目标机器上。为调试构建选择静态链接,或者仅将应用程序的调试构建与零售MSVCRT链接。

如果您选择使用MFC框架进行UI开发,那么同样的考虑也适用于MFC及其相关的dll。(但你说的是主机应用,所以你不必担心这个问题)。

如果没有黑客攻击,你的EXE无法在Linux上运行。(重新编译更容易)。但是如果你用。net编程你的控制台应用程序,EXE有很高的机会在Linux上运行Mono。

  1. 它可能会运行良好,除非你使用WinAPI,它已经在Windows的后期版本中引入。一般来说,如果你关注MSDN很重要,它包含一个名为"最小操作系统"的部分。@AlessandroV已经回答了,一般只是在项目设置中将其关闭。我认为它是默认关闭的(对于Win32控制台应用程序,那就是)
  2. EXEs只能在Windows上本机执行,在linux上有允许EXEs执行的软件(Wine),但是性能比在特定操作系统上运行本机编译的项目更差。为了获得最好的性能,并且正确地做事情,项目应该使用该操作系统的本机编译器进行编译。如果您使用的函数不是特定于操作系统(不是WinAPI),则此操作将成功。如果您将使用libc,您应该没问题。有几个开源库可以让编写跨平台代码变得更容易,boost就是其中之一。

好运。

关于您的问题2:当您构建一个c++应用程序时,您仍然必须确保您的目标系统具有该应用程序的所有运行时库。Visual studio(甚至VS服务包)提供了不同版本的运行时库。这些都安装在并行缓存WinSxS中。

当您部署应用程序时,您应该为构建应用程序时使用的运行时库添加一个VCRedist.exe。

3:如果您编写可移植的c++控制台应用程序(不使用Windows特定的函数),您可以使用针对该平台的某些编译器简单地重新编译为其他平台。