RedHat6で最新のgccにコンパイルする:ソフトウェアを配布するには?

RedHat6で最新のgccにコンパイルする:ソフトウェアを配布するには?

私のソフトウェアはRHEL7を含むさまざまなオペレーティングシステムでコンパイルされています。 RHEL6で実行するようにビルドしてもらいました。私の問題は、私のC ++コードがgcc-4.4(RHEL6に付属の機能)にないC ++ 11機能に大きく依存していることです。 Nullptr、auto、lamdaはサポートされておらず、コードにはこれらの項目がたくさんあります。

開発者ツールセットのように、RHEL6で動作するように最新のgccバージョンを入手する方法があることを確認しました。 RHEL6用ソフトウェアを構築できるということには疑いの余地はありません。

しかし、gcc-6などでコンパイルされたソフトウェアのバイナリには何が必要ですか? gcc-6用Cライブラリ? gcc-6用のC ++ライブラリ?これを私のバイナリに静的に接続する必要がありますか?

さらに、私のソフトウェアは.rpmファイルにパッケージされ、標準の場所/usr/bin、/usr/lib...にインストールされます。新しいCおよびC ++ライブラリファイルをターゲットシステムのどこにインストールしますか? (明らかに/usr/libにはないので、デフォルトを妨げる可能性があります!)

編集する:私のソフトウェアは共有オブジェクトです。 C ++ライブラリを静的にリンクできますか?しかし、私の共有オブジェクト(私は制御できません)を使用するプログラムはどうですか?他のバージョンのC ++ライブラリを使用できますか?リンカーは重複する項目をたくさん探していませんか?ミミズ缶を開けそうです…

編集する:RHEL6の標準C ++ライブラリで最新のgccコンパイラを使用できますか?

編集する:共有オブジェクトには純粋な「C」インタフェース(標準化)があります。

ベストアンサー1

これらの新しいCおよびC ++ライブラリファイルをターゲットシステムのどこにインストールしますか? (明らかに/usr/libにはないので、デフォルトを妨げる可能性があります!)

/usr/lib/代わりに、これらの新しいライブラリ(またはターゲットシステムのデフォルト、私のDebianでは入って /usr/lib/x86_64-linux-gnu/来るライブラリ)をインストールしてください/lib/x86_64-linux-gnu/。あなたは気にしなければなりません-S。

私のソフトウェアは共有オブジェクトです。 C ++ライブラリを静的にリンクできますか?

これは以下には適用されない場合があります。共有オブジェクト(しかし、実行可能ファイルに適用することができ、その後libstdc++静的および動的にリンクできますlibc.so)。ただし、共有オブジェクトは他の共有ライブラリと関連付けることができます。 C++11 ライブラリを提供する場合、ユーザーは C++11 コンパイラが必要です。とても慎重ですあなたのライブラリにはC互換のAPIしかありません。

いくつかのヘッダーファイルを公開することができ、以下を利用する必要があります。パッケージ構成したがって、適切な.pcファイルを送信してください。

読書を検討してください図書館の運営方法C++ dlopen mini 使い方ガイドそしてドレーパー共有ライブラリの作成方法紙。

RHEL6の標準C ++ライブラリで最新のgccコンパイラを使用できますか?

いいえ。標準のC++ライブラリはC++コンパイラと密接に関連しており、ABIが異なる場合があります。

ところで、私はあなたがライブラリのソースコードを提供することを強くお勧めします。フリーソフトウェア。その後、以前の Redhat ディストリビューションで作業しているコミュニティにライブラリを正しくパッケージ化するのに役立つよう依頼できます。

ライブラリには他の多くの依存関係があります。たとえば、GUIライブラリの場合は、他のリソース(フォントやイメージなど)を使用できます。

おすすめ記事