1

画像マッチングを実行するビジュアル C++ プログラムがあります。私はopenCVを使用しています。Linuxサーバーでexeを実行しようとしています。しかし、Linux でビジュアル C++ コードをコンパイルする方法がわかりません。

誰でもこの点で私を助けてくれますか。. .

4

2 に答える 2

4

MSVC で C++ コードを作成する際に賢く作業を行った場合、プラットフォームに依存するすべてのコード (つまり、C++ に対する Microsoft の拡張機能と Windows 専用ライブラリの使用) を残りの部分から最初から分離し、どこでそれを行うべきかを正確に把握していることになります。 Linux でも動作するように変更します。

残念ながら、あなたの質問は、これがクロスプラットフォーム コーディングの最初の試みであることを示唆しています。その場合、おそらくコード全体に Microsoft イズムが散らばっており、それらを 1 つずつ選択する必要があります。コンパイラを起動し、エラー メッセージを見て、そこから進みます。頑張ってください、それは苦痛ですが、次のプロジェクトのための非常に貴重な教訓でもあります.

(私はここで 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 のロギングを使用する) を使用するか、他のすべてが失敗した場合はマクロを使用します。コード全体で上記を使用しないでください。いくつかのヘッダー/実装ファイルに分離し、別のソースフォルダーに保存してください。

また、MSVC プロジェクト ファイルは Linux では機能しないため (明らかに)、 Makefile (恥知らずなプラグイン: Makefile チュートリアル) についても理解しておく必要があります。一方、Makefile は、Windows でも非常に美しく機能します (たとえば、Cygwinを使用して、コマンド ラインで MSVC コンパイラを呼び出す方法を詳しく調べたい場合は、おおまかに次の行に沿って:

ifeq ($(OSTYPE),linux)
    CC := gcc
else
    CC := cl.exe
endif
于 2012-06-25T06:13:07.537 に答える
2

There's also winelib and stuff. Point your build system to using winegcc/wineg++ as your compiler, and go for it. It can compile a fairly large subset of windows programs. This should be a good option if all you need is to get one or two programs to work.

于 2012-06-25T07:44:15.580 に答える