繁体   English   中英

可以在Mac OS X或Linux上编译和运行Visual C ++程序吗?

[英]Can a Visual C++ program be compiled and run on Mac OS X or Linux?

......如果是的话,怎么样?

具体来说,我想在Mac OS X Snow Leopard 10.6.8上编译并运行wavdiff 据我所知(这不是很远,因为我是C ++的新手),这是用MS Visual C ++或类似的东西创建的。

我非常感谢能够解决在Mac OS X或Linux上编译Visual C ++程序的一般情况的答案,并且还解决了上面的具体挑战。

C ++语言是可移植的。 理论上,C ++源代码可以编译为在任何平台上运行。

但是,有一些需要注意的注意事项:

  • 行为在不同平台上可能会有所不同。 C ++标准留下了许多实现定义的东西,这意味着它取决于单个平台和编译器应该如何表现。 例如,常见数据类型的大小可以(并且将)在不同平台上变化。 64位Linux上的long通常为64位宽,而64位Windows上只有32位宽。 Windows上的wchar_t为16位宽,但Linux上通常为32位。 因此,如果您的代码对实现定义的行为做出假设,那么它可能不是可移植的(一个典型的例子是假设指针可以存储到intunsigned int 。这在32位机器上很有用,但是在64位,您最终尝试将64位数据存储到32位宽的对象中。
  • 即使您的代码是可移植的,您的依赖关系也可能不是。 最明显的例子当然是OS API。 使用Win32 API的代码无法在不可用的平台(Windows以外的任何位置)上编译。 如果不可用,则依赖于POSIX API的代码将无法编译(Windows支持某些POSIX API,但远非所有)。
  • C ++可能意味着很多不同的东西。 有ISO标准化语言,便携式,然后是个别编译器理解的方言。 Visual C ++,GCC和任何其他主要的C ++编译器允许一组不属于标准的语言扩展,并且可能不允许在不同的编译器上使用。 如果您的代码依赖于那些代码,则可能无法使用其他编译器进行编译。 (例如,Visual C ++允许非const引用绑定到临时,严格说来不允许,其他编译器会拒绝它。默认情况下,GCC允许在堆栈上分配动态大小的数组,这也是非标准扩展,其他编译器将拒绝。)

所以这取决于代码,真的。 干净,高质量的代码往往便携,没有什么问题。 当然,对于直接依赖于OS服务的部分,必须为不同的OS重写(或者可以使用跨平台的包装器/库,可以用于以可移植的方式执行相同的操作)

此程序无法轻松移植(在没有源更改的情况下重新编译)。 至少没有改变源。 它包含对Windows库的依赖性,并且在某些部分与Windows API相关联。

问题不在于它是用VC ++编写的,而是它具有这些依赖性。 通过在目标平台上重新编译或使用交换机定位不同的平台,可以在很多情况下轻松移植编码为没有平台依赖性的程序。

仅基于此源文件,看起来代码本身可能是合理的可移植C ++。 问题是它(或它使用的任何类)是否使用了那些在其他平台上不存在的Windows API。 您可以做的赌注是询问作者他们的想法,或者只是尝试一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM