在linux中编译可视化C ++代码?

时间:2012-06-25 03:37:16

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

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

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

2 个答案:

答案 0 :(得分:4)

如果你在MSVC中编写C ++代码时巧妙地做了一些事情,那么你从一开始就隔离了所有与平台相关的代码(即,C ++的Microsoft扩展和仅使用Windows的库),并且确切地知道进行修改以使其在Linux上运行。

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

(我不是在这里指点MSVC。对于那些使用GNU-isms乱丢代码然后想在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上不起作用(显然)。另一方面,Makefiles在Windows上也能很好地工作(例如通过Cygwin,如果你想深入研究如何在命令行上调用MSVC编译器,大致如下:

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

答案 1 :(得分:1)

还有winelib和东西。将构建系统指向使用winegcc / wineg ++作为编译器,然后继续使用它。它可以编译一个相当大的Windows程序子集。如果你需要的只是让一个或两个程序工作,这应该是一个很好的选择。