我有一个执行图像匹配的可视 C++ 程序。我正在使用openCV。我希望在 linux 服务器上运行 exe。但我不知道如何在 linux 中编译可视化 C++ 代码?
任何人都可以在这方面帮助我。. .
我有一个执行图像匹配的可视 C++ 程序。我正在使用openCV。我希望在 linux 服务器上运行 exe。但我不知道如何在 linux 中编译可视化 C++ 代码?
任何人都可以在这方面帮助我。. .
如果您在 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 教程),因为 MSVC 项目文件在 Linux 上不起作用(显然)。另一方面,Makefile 也可以在 Windows 上很好地工作(例如,通过Cygwin,如果您想深入研究如何在命令行上调用 MSVC 编译器,大致如下:
ifeq ($(OSTYPE),linux)
CC := gcc
else
CC := cl.exe
endif
还有 winelib 和其他东西。将您的构建系统指向使用 winegcc/wineg++ 作为您的编译器,然后继续使用它。它可以编译相当大的 Windows 程序子集。如果您只需要让一两个程序运行,这应该是一个不错的选择。