从Visual C++移植到Linux

Porting from Visual C++ to Linux

本文关键字:Linux Visual C++      更新时间:2023-10-16

我对此有点陌生,所以如果这没有意义/是一个愚蠢的问题,请道歉!!

无论如何,我正在创建一个必须使用OpenCV和UDP套接字的项目。我目前正在Visual Studio(2013)中编写C++部分,因此该项目是Visual C++。计划最终是将该项目从PC转移到运行linux发行版的嵌入式计算机上。

我想知道,如果我在Visual Studio上开发整个C++代码,然后尝试移植到linux环境,以后是否会有什么重大问题让我头疼?

如果是这样的话,是否有一种方法可以通过更改IDE或其他方式来避免这些未来的问题??

如果您的GUI使用MFC,那么有一天您可以告别将代码移植到Linux的任何可能性。

如果您只将visualstudio用作IDE,并使用可移植的第三方库(Qt、boost…),那么您应该能够顺利地移植代码。

实现这一目标的一个好方法是:

  • 将所有文件名都用小写
  • 避免使用任何win32 API(首选boost库)
  • 如上所述,不要在文件路径中使用\,/几乎总是适用于所有平台
  • 编写一些Cmake脚本来生成vcproj和sln文件
  • 。。。它并不是详尽无遗的

如果这在PC上有效,那么您可以使用Cmake生成Linux Makefile,它有望在Linux下编译和运行。

理想情况下,要运行大量的单元测试,因为移植可能会引入多个小错误,您将很难找到这些错误。

您可以使用多平台编译器,如MINGW(http://www.mingw.org/)最终使用代码块(http://www.codeblocks.org/)或Netbeans以防止兼容性问题。编写的代码应该是高度兼容的。但是使用VisualC++编译器,在Linux上编译程序可能会更复杂,因为该编译器仅在Windows上运行。

我最近将一个Visual C++项目转移到了Linux发行版,没有遇到重大问题。最大的问题是我不得不把all改成/。如果您有疑问,您可以始终使用多平台编译器。

有一个项目可以在Windows上使用Visual Studio进行编译,也可以在Linux上进行编译。我有两个这样的项目。它们可以在https://svn.sullivanandkey.com/SnKOpen/cpp/now/trunk/和https://svn.sullivanandkey.com/SnKOpen/cpp/yekneb/trunk/.

这两个项目都不使用GUI,但是如果您使用诸如wxWidgets、FLTK或Qt之类的跨平台GUI库,则是可能的。

我的YekNeb项目在以下操作系统上编译:FreeBSD、GNU/Linux、Microsoft Windows、Solaris和ReactOS。

关键是要将自己限制在您希望针对的所有平台上可用的API中。如果您使用任何第三方库,如OpenCV,请确保它们在您希望使用的每个平台上都得到支持。

有时,您需要使用行为不同的代码,这取决于给定函数在给定平台上是否可用。我建议不要使用我在上面提到的两个项目中使用的技术来做到这一点。我将很快过渡到CMake,并利用CMake:How to Write Platform Checks中的配置功能。

我希望这能有所帮助。