在VC ++中编程以在Windows外部运行

时间:2011-05-04 08:21:01

标签: .net c++ windows visual-c++

我在VC ++ 2008中有关于编程的以下问题

  1. 如果我在Windows 7中制作Win32控制台程序,它是否适用于7以下的任何Windows?
  2. 我可以创建独立于.NET Framework的C ++应用程序吗?如果是,请告诉我如何做到这一点。
  3. 我可以在VC ++中创建应用程序,以便在Linux等其他操作系统上运行,前提是它可以运行.exe文件吗?如果是,请告诉我如何做到这一点。
  4. 我正在学习VC ++,只是想清除疑惑。 希望他们很快就会被清除!

    先谢谢你 干杯

5 个答案:

答案 0 :(得分:3)

1>取决于:如果不使用任何Windows 7特定的API,您将在Windows Vista上运行该程序没有问题;如果你不使用任何Vista特定的API,你将在XP等上运行它没有问题。

2 - ;当然,您只需要创建一个本机项而不是C ++ / CLI一个

3>您将需要一个像“wine”这样的模拟器来运行linux下的Windows可执行文件

答案 1 :(得分:3)

在大多数情况下......但请记住:

如果您想在没有.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)。在将EXE复制到的计算机上,这些DLL并不总是可用。当您在另一台计算机上运行EXE时,您可能会收到有关无法找到MSVCRT * .dll的应用程序错误。如果发生这种情况,您可以在项目设置中切换到静态链接(然后只是将EXE直接复制到其他计算机),或者在要运行EXE的其他计算机上预安装相应的MSVCRT。 Visual Studio预先安装MSVCRT作为其自身设置的一部分。 Visual Studio附带MSI文件,用于安装可以重新分发的MSVCRT。 EXE的调试版本可能需要手动将MSVCRT DLL的调试版本复制到目标计算机。为调试版本选择静态链接,或者只使用零售MSVCRT进行应用程序链接的调试版本。

如果您选择将该框架用于UI开发,则MFC及其相关的DLL也适用相同的考虑因素。 (但你说控制台应用程序,所以你不必担心这个。)

如果没有一些黑客行为,您的EXE将无法在Linux上运行。 (重新编译更容易)。但是如果你用.NET编写你的控制台应用程序,那么EXE很有可能在使用Mono的Linux上运行。

答案 2 :(得分:2)

  1. 除非您使用的是Windows的更高版本中引入的WinAPI,否则它可能会正常运行。通常,如果它对您重要,请注意MSDN,它包含一个名为“最小操作系统”的部分。
  2. @AlessandroV已经回答,一般只在项目设置中关闭。我认为它默认为Off(对于Win32控制台应用程序,即)
  3. EXE只能在Windows上本地执行,在Linux上有允许EXE执行的软件(Wine),但性能比为特定操作系统运行本机编译的项目更糟糕。为了获得最佳性能,并且正确地执行该项目,应该使用该os的本机编译器进行编译。如果您使用非特定于操作系统的功能(不是WinAPI),这将成功。如果你将使用libc,你应该没事。有几个开源库可以使编写跨平台代码变得更容易,boost就是其中之一。
  4. 祝你好运。

答案 3 :(得分:1)

关于您的问题2:在构建C ++应用程序时,您仍然必须确保目标系统具有应用程序的所有运行时库。 Visual Studios(甚至是VS服务包)都带有不同版本的运行时库。它们安装在并行缓存WinSxS中。

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

答案 4 :(得分:0)

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