私がまだ定期的に使用しているシステムの1つは、ある種の「Frankenbuntu」14.04を実行することです。このシステムは、私が作成してインストールしたPPAとソフトウェアを介して多くの追加アップデートを受けました/opt/local
(Mac用MacPortsポートシステムの改訂版を使用しています) . 実際、ほとんどのLinuxポートはMacにもインストールされます。
そのプレフィックスの下のライブラリディレクトリはldconfigに追加されませんLD_LIBRARY_PATH
。
私はclang 8をメインコンパイラ(LLVMリポジトリを介して利用可能な最新バージョン)として使用してきました。これは、Ubuntu(9.4.0)で利用可能な最新のGCCよりも少し高速で強力なためです。私はclang 12を自分で作りました(忍耐は非常に退屈な練習でした!)。しかし、読んでください。適切な C++20 サポートを受けるには clang 17 が必要です。。またはGCC12。
GCC 12もありますが、port
/opt/localにGCC(7)をインストールする前に、libstdc ++ランタイムブレンドに関する問題がありました。それら可能これは、オペレーティングシステムにすでに最新のlibstdc ++(GCC 9.4.0バージョン)があるか更新されており、同様の状況が再発生しないためです。少なくともOSをアップグレードするまではそうです。
それにもかかわらず、私は最近いくつかのベストプラクティスとトラップの簡潔な概要について質問したいと思いました(長年にわたってパラレルプレフィックスをインストールして実行してきた人にとってはあまり明確ではありません)。 libstdc++ 9.4.0と12.3.0の間に既知の非互換性はありますか?それともMacにインストールしたlibstdc ++ 13.2.0のバージョンですか?
よろしくお願いします!
以前のコメントに対する回答:
私はレトロコンピューティングの「ファン」です。
私のオペレーティングシステムは古く、サポートされなくなったことを知っています。この特定のコンピュータでこのバージョンを維持する理由があり、これ以上アドバイスはありません。アップグレードにはXX分しかかかりません。経験的には、この作業には時間がかかり、少なくとも既知の互換カーネル(4.14.328 ATM)にダウングレードするまでシステムが不安定になる可能性があり、その間は役に立つ用途には使用できません。私の並列プレフィックスのGCCを構築するのに5時間かかり、完全に元に戻すことができます(MacPortsには非常に便利な無効化/有効化機能があります)
私はlibstdc ++がABIと互換性がないことを知っていますが、少なくとも以下を目指しています。戻るABI互換:
apt には /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6 apt show libstdc++6 パッケージ: libstdcが含まれています。 ++6ステータス:インストール済み自動インストール:なしマルチアーチ:同じバージョン:9.4.0-1ubuntu1〜14.04
port:libgcc13
私のMacにインストールされているlibstdc ++バージョン:
> otool -L /opt/local/lib/libgcc/libstdc++.6.dylib
/opt/local/lib/libgcc/libstdc++.6.dylib:
/opt/local/lib/libgcc/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.32.0)
同じSOVERSION(6)は、dylibのより厳密に制御された組み込みバージョン番号でも見ることができます。
私はこれを libstdc++ v13.2.0すべきこれは、14.04でまだ利用可能な以前のバージョンのドロップイン置換であるかのように、現在持っているバージョンのドロップイン置換です。
適性バージョンlibstdc++6:amd64 パッケージ
したがって、既知の非互換性および/または問題に関する質問は、意図された以前のバージョンとの互換性という文脈で読む必要があります。
std::auto_ptr
私はC ++ 03モードでもGCC 13が実際に必要な機能を提供していないことを発見しました(しかし、ビルド設定の問題が原因ではそうではありません)。
答え1
最初の部分的な答え。
ld.soパスでport:libgcc13
ビルドしてテストした後、libstdc++.so.6.0.32
システムの.soライブラリの代わりにこのライブラリをロードする際に明らかな問題がないことがわかりますlibstdc++.so.6.0.28
。
そのヘッダーファイルのコードをビルドしても、システムC ++ランタイム(undefined reference to 'std::bad_function_call::what() const'
)にリンクされません。つまり、対応するヘッダファイルに対しても実行されません。しかし、これは予想されるものであり、並列接頭辞の下にバイナリをインストールするためにこのランタイムのみを使用することを覚えている限り、私にとっては問題ではありません。それにもかかわらず、彼らは他のライブラリへの強い依存関係を持つでしょう。