問題タブ [libstdc++]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - libstdc++.so.5 を使用する gcc の最新バージョン
(libstdc++.so.6 ではなく) libstdc++.so.5 をまだ使用している gcc の最新バージョンは何ですか?
c++ - GCC/Windows DLL/C++ STL フロントでの改善点はありますか?
昨日、GCC でコンパイルされた DLL を Cygwin で使用しているときに、やや厄介なクラッシュが発生しました。基本的に、デバッガーで実行するとすぐに、RtlFreeHeap() が割り当てられていないアドレスを受け取ることによって引き起こされるデバッグ トラップに陥る可能性があります。
これは、Cygwin 上の GCC 3.4 の既知のバグです。この状況は、libstdc++ ライブラリに空の文字列に対する「巧妙な」最適化が含まれているために発生します。詳細は省略しますが (この投稿全体の参照を参照)、別の DLL に「属する」 std::string オブジェクトに対して 1 つの DLL にメモリを割り当てると、1 つのヒープに解放するチャンクを与えることになります。別のヒープ。したがって、RtlFreeHeap() の SIGTRAPです。
DLL の境界を越えて例外がスローされた場合に報告されるその他の問題があります。
これにより、プロジェクトが DLL と STL に基づいているとすぐに、Windows 上の GCC 3.4 は受け入れられないソリューションになります。このオプションを通過するためのオプションがいくつかありますが、その多くは非常に時間がかかり、面倒です。
- libstdc++にパッチを当てるか、 --enable-fully-dynamic-string構成オプションを使用して再構築できます
- 代わりに静的ライブラリを使用できるため、リンク時間が長くなります
私が使用している他のツールが原因で、(まだ) 別のコンパイラに切り替えることもできません。一部の GCC 関係者からは、「ほとんど報告されていないので、問題にならない可能性が高い」というコメントが寄せられており、それがさらに私を悩ませています。
これについて何かニュースを持っている人はいますか?GNU Radio bug trackerに関する 1 つのコメントを除いて、これが修正されたという明確な発表を見つけることができません (バグはまだ「割り当て済み」としてマークされています) 。
ありがとう!
c++ - アプリケーションは libstdc++ の 2 つの異なるバージョンに依存できますか?
アプリケーションは同時に 2 つの異なるバージョンの libstdc++ に依存できますか? (例: libstdc++5 と libstdc++6)? シナリオは - 一部のバイナリは libstdc++ 6 に依存していますが、libstdc++5 に依存する .so をロードします...
それはうまくいく可能性がありますか?
linux - GLIBCXX_4.1.2 をインストール済みの場合、GLIBCXX_3.4.9 が必要ですか?
MediainfoDLL の最新バージョンを Fedora 8/9 64 ビット ( http://mediainfo.sourceforge.net/es/Download/Fedora ) にインストールしています。libmediainfo-0.7.20 と libzen0-0.4.3 ファイルをダウンロードしました。
libzen0 をインストールしようとすると、次の出力が得られます。
しかし、問題は、libstdc++ の 4.1.2 バージョンが既にインストールされていることです。
どうすればこの問題を解決できますか?
編集:
c++ - libstdc++へのリンクは避けてください
私は現在LinuxとuClibcでCを使用している組み込みプロジェクトに取り組んでいます。これをC++に移行することに関心がありますが、libstdc++でのリンクに関連するオーバーヘッドは必要ありません。私の印象では、これは、iostreamやvectorなどのSTLから何も使用しない場合に可能です。
libstdc++にリンクせずにg++をコンパイルするように指示するにはどうすればよいですか?
gcc - libstdc++.so.5 と libstdc++.so.6 の両方を必要とするアプリケーションを構築するにはどうすればよいですか?
私は C/C++ プログラマーではなく、Cでのライブラリーのリンケージがどのように機能するかについてほとんど知らないという重要な通知を前置きしたいと思います。
私たちのコードは libstdc++.so.6 (gcc 3.4 だと思います) を使用しています。libstdc++.so.5 (gcc 2.something または 3.2 だと思います) を使用するサードパーティのプリコンパイル済み (クローズド ソース) ライブラリがあります。これはLinux上にあります。サードパーティ製ライブラリの .a バージョンと .so バージョンの両方があります。
サードパーティのライブラリを使用してアプリを構築することは可能ですか? どのように?libstdc++.so.5 をマシンにインストールせずにアプリをビルド/実行することは可能ですか?
重要な情報を忘れてしまった場合は、お知らせください。これに関連する内容がほとんどわかりません。完全な答えはおそらく不可能だと思います。私は本当に方向性とガイダンスを探しています。これを静的にリンクする、それを動的にリンクする、それを再構築する、まあまあを事前に構築する、バージョン x に切り替える、または quizdoodle をシンボリック リンクする、など。
アップデート:
dlopen
withを使用しRTLD_LOCAL
て、サードパーティのライブラリをアプリの残りの部分から分離しようとしました。これはほとんど機能しているように見えますが、原因不明の大量のメモリ リークが残っています。を呼び出すdlopen
と、サード パーティのライブラリがmalloc
既に読み込まれている .so.6 などのシンボルを取り込み、混乱が生じるのではないかと考えています。
くすくす笑いながら、サードパーティのライブラリを に入れてみて、LD_PRELOAD
アプリを実行したところ、メモリ リークが完全になくなったようです。
c++ - イテレータのペアによる文字列の初期化
イテレータで文字列を初期化しようとしていますが、次のようなものが機能します:
しかし、これはしません:
ありがとうございました。