問題タブ [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++ - 「.text シンボル `._XXXXXXXXX の認識されないストレージ クラス 111」とはどういう意味ですか?
AIX 5.3 でコンパイルされた実行可能ライブラリまたは共有ライブラリの objdump を実行しようとすると、このエラー メッセージが何度も表示されます。このマシン上の他の実行可能ファイルについては、正常に動作します。この実行可能ファイルは、実行時 (文字列の割り当て時) にもクラッシュします。
問題があるかどうかはわかりませんが、リンク中に次のような警告がいくつか表示されます: ld: 0711-224 WARNING: Duplicate symbol: non-virtual thunk to XYZ::~XYZ() (および1つの外部ライブラリですが、問題ないと確信しています)。
弱いシンボルに接続できると何かが教えてくれますが、その問題を解決する方法がわかりません。何が間違っているのか、これを続行するために確認できることはありますか?
また、すべての cpp ファイルを 1 つの大きなファイルに含めて、これをコンパイルしようとしました。まだセグメンテーション違反が発生しますが、別の場所で発生します (現在は g_strXXXXX.erase() - グローバル文字列の消去)。スタック トレースの一部は次のようになります。
(...)
.#3 0x101d8534 in __static_initialization_and_destruction_0(int, int) (__initialize_p=1, __priority=65535) at ../../licserver/someclass1.cpp:4
.#4 0x101d8df0 in GLOBAL _I_fc_softc () at ../../shared/someclass1.cpp:225
.#5 0x103c81fc in GLOBAL _FI_licserver_unittest ()
.#6 0xd03aadb0 in mod_init1 () from /usr/lib/libc.a(shr.o)
.#7 0xd03aacc4 in __modinit () from /usr/lib/libc.a(shr.o)
.#8 0x100001d4 in __start () (gdb) GLOBAL _I_fc_softc
libc または libstdc++ に問題があるように見えますか?
c++ - libstdc++GLIBCXXバージョンエラー
g++を使用してコンピューターでc++プログラムをコンパイルし、実行可能ファイルを転送して大学のサーバーで実行すると、次のようになります。
プログラムは私のコンピューターで正常に実行され、大学のサーバーに新しいソフトウェアをインストールする権限がありません。
何か助けはありますか?ありがとう
c++ - libstdc++.so.6 のどのバージョンを使用しますか?
Solaris でサードパーティの共有ライブラリ (libsw_api.so) を使用していますが、ロードしようとすると次のエラーが発生します。
libsw_api.so で ldd を実行すると、すべての参照、特に libstdc++.so.6.0.3 を指す C++ 標準ライブラリが満たされているように見えます。
ただし、そのライブラリは _ZNKSt9bad_alloc4whatEv をエクスポートしません。
何が問題なのですか?間違ったバージョン?Unix での C++ はあまり得意ではないので、助けていただければ幸いです。
この SPARC32PLUS と SPARC の不一致が問題の原因でしょうか?
私のシステム:
c++ - std::vectorコンストラクターの動作
次のコードを取ります。
このコードはlibstdc++ではコンパイルされません。ただし、VisualStudioのC++ライブラリでコンパイルされます。私が期待する動作はv
、サイズ10の10個のベクトルで満たされていることです。これは、VisualStudioで得られるものです。
Visual Studioで呼び出されるコンストラクターは、2つのイテレーターを使用するコンストラクターです。コンストラクター自体は次のように定義されます。
テンプレート関数には2つのバージョンがあります_Construct
。どちらも同じシグニチャを持っていますが、一方は範囲からベクトルを初期化し、もう一方は2番目のパラメータから構築された値型copyのN個のコピーでベクトルを初期化します。この場合、テンプレートパラメータはの2番目のバージョンでのみ有効です_Construct
。
結果はv
、値10からコピー構築されたベクトルの10個のコピーで満たされます。libstdc++を使用して同じ効果を得るには、次のように構築することで同じコードパスが使用されます。
ここで正しい実装はどれですか?これはlibstdc++のバグですか、それともVisualStudioのC++ライブラリの拡張ですか?
編集:明確にするために、範囲コンストラクターを呼び出す必要があるかどうかは尋ねていません。私は、それを達成するためにどのパスをとるかに関係なく、どのC++実装が正しい動作をするかを尋ねています。
c++ - mkstempに相当するC++標準ライブラリは何ですか?
一時ファイルを使用するプログラムをPOSIXFILE
からC++標準ライブラリのiostreamに移行しています。mkstempの正しい代替手段は何ですか?
gcc - gnu gcc 標準ライブラリ stdc++、gcc、および gcc_eh をどのように再パッケージ化しますか?
gnu gcc および stdc++ ライブラリ ビルドを変更および再コンパイルせずに、別の埋め込み soname を使用してこれらのライブラリの動的読み込みバージョンを再現できる必要があります。
私は賢く、利用可能な静的バージョンを使用して、次のようなもので再パッケージ化すると思いました。
ld -E -shared -static "-lstdc++" -lgcc -lgcc_eh -o librepackaged_standard.so
librepacked_standard.so は警告やエラーなしで作成されますが、ldd は動的ライブラリではないと報告し、readelf は次の基本的なシンボルのみを報告します。
ld が静的に定義されたすべてのシンボルを取り込まない理由がわかりません。また、これを機能させるために指定する必要がある他の特別なパラメーターがあるかどうかもわかりません。
もう 1 つのオプションは、元の elf ライブラリに組み込まれている soname を単純に変更する既知のクロス プラットフォームの方法があるかどうかです。私は現在、エルフ形式のバイナリのみに関心があります。既存のバイナリの .soname を変更する独自のツールを作成することに興味はありません。
更新: シンボルがコンパイルされなかった理由はld
、.o ファイルとは異なる方法で静的バイナリを処理するためです。デフォルトでは、リンク行の別のライブラリで必要とされない限り、.a ファイルからシンボルをインポートしません。--whole-archive オプションを指定して修正しました。
ただし、別のエラーが発生しますrelocation R_X86_64_32S against
。_ZSt12_S_first_one' は、共有オブジェクトを作成するときに使用できません。-fPIC で再コンパイルすると、and
シンボルを読み取れませんでした: 値が正しくありません` これらは両方とも、bitset.o アーカイブの libstdc++.a からのものです。したがって、.a を動的ライブラリに再コンパイルすることはできません。デフォルトでは、GNU GCC コンパイルは静的ライブラリに使用されるオブジェクト ファイルを PIC オプションでコンパイルしないためです。
そのため、elf ツールを見つけるか、ビルドを変更して GNU GCC を再コンパイルする必要があります。
回答の1つが述べたように、ライセンスの問題はこれらのアプローチのいずれかで懸念される可能性があります. 私の最良の答えは、要件を変更し、GCC 標準ライブラリの変更や再パッケージ化を一切伴わない別の解決策を見つける必要があるということです。
c++ - g ++のSGI STLロープ?
/usr/include/c++/4.5.1/ext/rope
my (and )にロープの実装があるようですropeimpl.h
。SGI STL と比較したところ、コードはほとんど同じコードベースのようです。
その状態や、機能しているかどうかはわかりません。また、これが非常に古い古いコードなのか、進行中のコードなのかはわかりません
いずれにせよ、それを使用する方法に関する参照は見つかりませんでした(機能する場合)。私が行方不明になっていることを知っていますか?私が使用できる使用例はありますか?
編集ここで cvsの履歴を見ると、最後のアクティビティが 4 か月前であることがわかります。これはあまりアクティブではないように見えますが、放棄されたようにも見えません。
c++ - std::shared_ptr を clang++ および libstdc++ で使用する
libstdc ++(4.6.1)を使用して、clang ++(clangバージョン3.1(トランク143100))でstd::shared_ptrを使用しようとしています。私は小さなデモプログラムを持っています:
以下を使用してビルドできます。
次のエラー出力が表示されます。
何らかの理由で、移動コンストラクターが提供されているために削除されるコンストラクターが必要です (これは正しい動作です)。しかし、(g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1.) でコンパイルできるのはなぜですか? これを修正する方法について誰かアイデアはありますか?
gcc - clangはlibstdc++(gcc4.4)を含むソースを解析できません
最近、新しいclang(3.1)をコンパイルし、プロジェクトの解析に使用しようとしましたが、標準ライブラリ/インクルードの解析に失敗します...たとえば、次のエラーが表示されます。
/usr/include/c++/4.4/cstddef:51:9:エラー:予期される';' トップレベルの宣言子または/usr/include/c++/4.4/bits/cpp_type_traits.h:71:3の後:エラー:不明なタイプ名'テンプレート'
明らかに、clangはこのファイルを解析できませんが、これらは標準のlibstcファイルです..これをどうすればよいですか?
linux - コンパイル時のリンクと std:: ライブラリに対する実行時のリンク
最初の質問: /etc/ld.so.conf.d に構成ファイルを配置せずに、クライアントが gcc のデフォルト インストールを使用して RHEL5.7 と RHEL6.1 の両方で SDK に対してビルドできるようにする方法が必要です。この場合、LD_LIBRARY_PATH の設定は機能しません。システムの構成方法に関するナレッジベースの記事をクライアントに提供せずに、クライアントが私の SDK にリンクできるようにする他の方法はありますか? 明確にするために以下をお読みください。
2 番目のシナリオ:
RHEL5 と RHEL6 の両方でランタイム SDK のビルドを担当しています。RHEL5.7 ボックスは、RHEL6.1 ボックスと同様に、標準の非登録インストールです。ただし、RHEL6 ボックスでは、自分で gcc をコンパイルしました。
--
--
リンクしようとしている .so および .a ファイルを提供できません。しかし、私は何が起こっているのかを描写しようとします。同じソースを取得し、SDK に対してビルドして実行します。次の結果が得られます。
RHEL 6 ボックス:
次のコマンドを実行するexport LD_LIBRARY_PATH=/usr/local/lib64:${LD_LIBRARY_PATH}; ./Session2
か、/etc/ld.so.conf.d で libstdc++ のコンパイル済みバージョンへのパスを設定すると、アプリケーションが実行されます。
RHEL5 ボックス:
これは非常に長い投稿になりつつありますが、支援を開始するのに十分な情報を提供したと思います. 何か具体的なサポートが必要な場合はお知らせください。
私がリンクしている libstdc++ に関する最後の情報です。
RHEL5: