web-dev-qa-db-ja.com

WindowsとLinuxのC ++-一般的な問題?

これまでのところ、私のC++での開発はすべてWindowsをターゲットにしていますが、いつかLinuxをターゲットにすることを常に心に留めています。したがって、クロスプラットフォームライブラリを選択し、コードを可能な限り移植性に保つ(または移植性のないコードの代替実装を提供する)必要性を認識しています。したがって、この質問はコードのコンパイルの問題とは関係ありません。

LinuxとWindowsの両方を対象とする場合、開発者が直面する一般的な問題は何ですか?特に、以下に限定されません。

  1. 構成ファイルを処理するためのベストプラクティス。 Windowsでは、これはかなり恣意的であるようです。ソフトウェアがプログラムフォルダー内、ユーザーのフォルダー(appDataの下)、およびレジストリーに構成を保存するのを見てきました。 Linuxでは、専用の構成フォルダー(/ etc)に重点が置かれているようです。コードでこれらの違いをどのように処理する必要がありますか?場所をハードコーディングしますか、それとも相談できるシステム定義の関数がありますか?

  2. (1)と同じですが、ロギング用です。

  3. プロジェクトファイルの同期を維持するにはどうすればよいですか?例えば。 Visual Studioプロジェクトファイルで何かを更新する場合、通常、使用しているLinux環境で同等のものを手動で更新する必要がありますか、またはこれを回避するために一般的に使用される方法はありますか?

  4. コード内のプラットフォーム実装の違いを処理する最良の方法は何ですか? #ifdefsを使用する必要がありますか、それともプラットフォーム固有のコードを個別のファイルに保持し、プロジェクトに含めるファイルを指定させる必要がありますか?

  5. 他に、検討/調査を開始すべきだと思ったことはありませんか?

3
Jon Bentley
  1. 物事の配置。 Filesystem Hierarchy Standard を参照してください。構成の概要:/etc/opt/<package>の下のマシン構成、$HOME/.<package>の下のユーザー構成。

  2. ロギングは、人によって意味が異なります。システムツールについては、 syslog を参照してください。

  3. それはあなたのVCSの仕事であり、いくつかのWindowsマシンを同期させることと大差ないはずです。

    1. 抽象化を提供するライブラリを見つけます(例:boostで始まる)
    2. そのようなライブラリを構築します。
    3. 小さな違いについては#ifdefを使用します。大きなものについては、1が見つからない場合は2を参照してください。
  4. セキュリティ対策として、自分のユーザーでサーバーアプリケーションをインストールするのが一般的です。 chrootも探してください。

1
AProgrammer