2012-02-17 38 views
1

私はlinuxに移植したいVisual Studioのプロジェクトファイルをたくさん持っているC++プロジェクトに取り組んでいます。私は基本的にWindowsの複数のファイルでwindows.hヘッダファイルを使用しています。さて、明示的にlinux.hファイルが存在しないので、私は確信しています。 Linux上で私は開発のためにEclipse CDTを使用しています。私はLinux上でどのように動作するのかという2つの考え方を念頭に置いていますが、正しい方向がわかるように入力してください:win32コード(windows.h)をlinuxに移植

(1)C++ファイルのLinux API呼び出しでWindows API呼び出しを削除する。しかし、これは、Linuxで同等の機能を見つけなければならないことを意味します。これはどこから見てもわかりません。例えば。 Win32のFiletimeはlinuxの何かに相当します(まだこの事は見当たりません)。

(2)これらの関数の基本的な構文(windows.hで書かれているように)をコピーして、ヘッダーファイルを作成します(これをlinux.hという名前にします)。

だから、私は物事を先に進める方法がわかりません。私はちょうどこの事を取り除きたい。次のもの以外のアイデアや意見を提案してください: (1)いいえ、Boostを使いたくありません。 (2)Visual Studioでファイルを書き直したくありません。

+6

"いいえ、私はブーストを使いたくありません。" "楽しかったです。 – ildjarn

+2

* Visual Studioでファイルを書き換えたくない* - どうやって移植するのですか? –

+0

オプション(2)では、Windowsヘッダーファイルにすべての関数の実装を書く必要があります。したがって、オプション(1)との違いはあまりありません。 –

答えて

1

本当にアプリケーションによって異なります。その非GUIアプリケーションのコマンドラインのみ場合。 win32呼び出しを、異なるプラットフォーム(linux、Mac OS X)と互換性のあるposixバージョンの関数に置き換えるべきでしょう。

これはオプション1です。ファイルタイムをhereのposixに変換し、コンパイルしたいosごとに#ifdefを持つ独自の関数でラップすることができます。

オプション2は痛みです。しかし、これはまだ選択肢です。実際には、ソースコードに含まれるWin32関数の数とposixバージョンとの違いによって異なります。このオプションはお勧めしません。

オプション1は、win32関数のposixバージョンを学び、可能な限りwin32関数の使用をやめたほうが良いです。

+0

ありがとう!すぐに私の疑いを取り除いた! – user1167760

4

LinuxはPOSIX APIを実装しています。パス(1)に従っている場合は、ここから置換ヘッダーと呼び出しを見つける必要があります。

また、Winelibを使用して、Linux上でWindowsコードをネイティブにコンパイルすることもできます。 Wine ProjectはWindows APIの多くを実装しているので、動作する可能性があります。理論的には、Windows用のプログラムをARM用のLinuxで実行するよう再コンパイルすることは可能ですが、保証はありません。

しかし、その2番目のパスに従う場合は、ユーザーがインストールしているWineのバージョンごとに再コンパイルする必要があります。そのため、x86上にある場合は、バイナリとcustom wine prefixが動作することが知られている状態に設定されています。

第3の選択肢は、すべてを削除し、Windows/Mac/LinuxでクロスコンパイルするQtなどのツールキットを使用して書き直し、直接の呼び出しを基になるオペレーティングシステムにドロップすることです。さまざまなオペレーティングシステムで頻繁に作業する必要のあるコードが見つかった場合は、おそらくこれが最善の選択です。

+0

ありがとう!これは私が探していたものでした。 – user1167760

4

Linux上のWindows APIが必要なようです。あなたはまた、STLやBoostのような移植可能なライブラリを使ってWindows API呼び出しを置き換えることで、C++コードを移植可能にすることを検討するべきだと思います。

しかし、実際にはできない場合は、WineHQを参照してください。これは、Linux上のWindows APIの実装です。

+0

返信いただきありがとうございます! – user1167760

関連する問題