【问题标题】:compiling visual C++ code in linux?在 linux 中编译可视化 C++ 代码?
【发布时间】:2012-06-26 08:20:15
【问题描述】:

我有一个执行图像匹配的可视化 C++ 程序。我正在使用openCV。我希望在 linux 服务器上运行 exe。但是我不知道如何在 linux 中编译可视化 C++ 代码?

任何人都可以在这方面帮助我。 . .

【问题讨论】:

  • 看,Visual C++ 只是微软的 C++ 编译器...你的意思是你想知道如何在 Linux 中编译 C++ 代码? GCC 可以做到这一点,但是移植代码可能会比编译更多的工作。

标签: linux visual-c++ gcc opencv cmake


【解决方案1】:

如果您在 MSVC 中编写 C++ 代码时做得很聪明,那么您从一开始就将所有依赖于平台的代码(即 Microsoft 对 C++ 的扩展和仅限 Windows 的库的使用)与其余代码隔离开来,并且确切地知道在哪里进行修改以使其也能在 Linux 上运行。

不幸的是,您的问题暗示这是您第一次尝试跨平台编码,在这种情况下,您可能在您的代码中到处乱扔微软主义,并且必须逐个挑选它们。启动编译器,查看它的错误消息,然后从那里开始。祝你好运,这将是一个痛苦,但也是你下一个项目非常宝贵的一课。

(我不是在这里指责 MSVC。对于那些用 GNU 主义乱扔代码然后想要在 MSVC 上编译的人来说也是如此......)

通常的结构如下所示:

#if defined( _MSC_VER )
// Microsoft version
#elif defined( __GNUC__ )
// GCC version
#else
#error Platform / compiler not supported.
#endif

编辑: 如果不明显,我们的想法是将上面的 ifdef 代码保持在绝对最小值。使用 typedef 的转发函数(即 log() 以使用 Unix 或 Windows 日志记录),或者 - 如果所有其他方法都失败 - 宏。 不要在代码中使用以上所有内容,将其隔离在几个头文件/实现文件中,保存在单独的源文件夹中。

您还需要熟悉 Makefile(无耻插件:Makefile tutorial),因为 MSVC 项目文件不能在 Linux 上运行(显然)。另一方面,Makefile 在 Windows 上也可以很好地工作(例如,通过Cygwin,如果您想深入研究如何在命令行上调用 MSVC 编译器,大致如下:

ifeq ($(OSTYPE),linux)
    CC := gcc
else
    CC := cl.exe
endif

【讨论】:

  • 熟悉 Make 之后,你可以看看 CMake。它具有相当简单的语法,并允许为 Visual、Eclipse、Make 和其他一些生成项目文件。而且它的配置文件非常轻量级(纯文本文件)
  • @Link:我个人对 Visual、Eclipse 等不太关心,所以我既不能支持你的建议,也不能反对它。即使在与编译 C 源代码无关的几个环境中,Make 总是让我浮想联翩。
【解决方案2】:

还有 winelib 和其他东西。将你的构建系统指向使用 winegcc/wineg++ 作为你的编译器,然后去做。它可以编译相当大的 Windows 程序子集。如果您只需要让一两个程序运行,这应该是一个不错的选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    相关资源
    最近更新 更多