Mac上でlibC++とstdlibC++のABI矛盾を処理するにはどうすればよいでしょうか?libC++と古いlibstdC++のABIの違いを処理する良い方法は何ですか?
問題:多くのC++ 11機能には、C++標準ライブラリの新しいlibC++実装が必要です。しかし、libC++は古いlibstdC++とABI互換ではありませんが、現在のところ、ほとんどのソフトウェアは通常、後者とリンクしています。例えば、システムコンパイラはまだstdlibC++を使用しています。つまり、macportでインストールされたすべてのライブラリは、文字列のようなstdクラス用に異なるABIを持ち、C++ 11を大量に使用するプロジェクトとはリンクできません。
私の現在のハック・オブ・a解決策:2つのバージョンのライブラリを用意しておくと、一般に問題(boost、opencvなど)が発生し、適切なものにリンクされます。
もし私が本当にlibC++を使いたいのであれば、私はstdlibC++を使って自分のシステムをパージし、macports(または他の場所であれば)からlibC++とのリンクしかないことを確かめてください。あなたはこの仕事がいかに難しいかを見ることができます。
誰も私たちが住んでいるこの "stdlib-limbo"に関連する素晴らしい方法を試しましたか? :)
編集:Appleは、システムにlibC++とlibstdC++の両方を同梱しています。前提となる問題を攻撃し、libC++への切り替えを試みると仮定します。あなたのシステムに現在インストールされているライブラリ(システムに同梱されているもの、ほとんどはmacport経由で、一部は手作業でコンパイルされたもの)の100%がlibstdC++にリンクされているので、libstdC++からlibC++への切り替えの推奨方法は何ですか)?誰もこれをして生き残ったのですか?
一緒にリンクされているすべてのコードが同じ標準ライブラリの実装とバージョンを使用する必要があります。他のすべては互換性がなく、決して働くつもりはありませんでした。 – PlasmaHH
はい、もちろんあります。これはすべての問題です。同時に、2つの互換性のない標準的なライブラリ実装が同時に流通しています。私の質問は、この問題に対処するために人々が採用した戦略についてです。 – kamjagin
それは戦略です。もっと多くの標準的なライブラリの実装があり、それらは相互に互換性がなく、永遠にそのままになります。 – PlasmaHH