2016-11-12 11 views
4

私はC++ 14を使用してクロスプラットフォームのサーバソフトウェアを開発しています。異なるバージョンのWindowsにバイナリとして出荷したいと思っています。 Linux。 Windowsでは、すべての依存関係が静的にリンクされたバイナリを作成しました。 Windows Serverのすべてのバージョンでこのバイナリをインストールして実行することができました。Linux上でC++ 14を使用し、異なるLinuxリリースをターゲットにした出荷バイナリ

RHEL6.4以降で動作するRed Hat Enterprise Linuxのバイナリを生成するにはどうすればよいですか?

LinuxでC++ 14をサポートするには、バージョン5以降のGCCを使用する必要がありますか? Red Hat Enterprise Linuxのバージョンは、C++ 14をサポートするGCCバージョンでは提供されないようですか?私が正しく理解していれば、Red Hat Developer Toolset 4.1.0を使用してC++ 14をサポートするGCCバージョンを取得する必要がありますか?

Red Hat Developer Toolset 4.1.0はRHEL6.5以降をサポートしているようですが、私はそれを使用して暮らすことができます。 Red Hat Developer Toolset 4.1.0を使用してRHEL6.5でソフトウェアをコンパイルすると、どうすればリンクできますか?

Developer Toolset 4.1.0のドキュメントを読むと、ABIとの互換性の問題があると思われ、Red Hatは本番ソフトウェアの開発に-std = C++ 98の使用を推奨していますか?つまり、同じ種類のディストリビューション内であっても、C++ 14を使用して別のLinuxバージョンで実行できるバイナリを作成することはできませんか?

この問題を明確にするための助けがあれば幸いです。

+0

私はLinuxのすべてのライブラリをWindowsのようにあなたのプログラムに静的にリンクできるはずだと思います。それでも問題が解決しない場合は、必要な依存関係を持つバイナリをいつでも出荷することができます。 – Rakete1111

+0

注:LGPLソフトウェアが含まれていると、静的リンクによってライセンス準拠の問題が発生する可能性があります。 –

+0

私はいつもそれを疑問視しました。何年も前に、ローカルでコンパイルするソースをリリースするか、文字通りすべてのディストリビューションのバージョンごとに1つのバイナリをリリースする必要がありましたが、現在はTeamSpeak 3 Serverのようなソフトウェアがあります。どちらに関係なく私はLinuxの人ではないので、何が可能になったのか分からないが、明らかに彼らは道を開いた。 – Havenard

答えて

2

開発に役立つ製品のために何が行われたかを教えていただけます。

リリースの対象となるすべてのUNIX/Linuxディストリビューションに独自のバージョンのGCCとbinutilsをビルドし、そのソースをビルドします。私たちはまた、私たちが依存しているすべてのC++ライブラリ(boostなど)をソースにしています。最後に、カスタムツールチェーンからlibstdC++を静的にリンクします。

結果として、各特定のLinuxディストリビューションに関連付けられたCインターフェイスのみに依存するバイナリがあるため、開発中に必要なC++標準のバージョンを使用できます。

次に、配布ごとにパッケージとバイナリtarballを公開します。

非常に古いLinuxシステムでは、「汎用」バージョン(カスタムツールチェーンで常に構築されています)を構築し、多くの機能を無効にして、必要な/サポートしているシステムへの依存を取りませんライブラリ。そのバージョンは、libcやlibpthread以外のシステムライブラリにはほとんど依存していないので、libcの最小値に付属しているほぼすべてのLinuxディストリビューションで実行できます。

関連する問題