0

stlport STL の実装で問題が発生しました。プラットフォームはおそらくここでは関係ありませんが、私は Android に使用します。特定のファイルを開こうとするサードパーティの共有ライブラリを使用しています。そのファイル パスは関数 asstd::stringに渡され、ライブラリ インライン関数になります。

inline bool ReadProtoFromTextFile(const string& filename, Message* proto) {
  return ReadProtoFromTextFile(filename.c_str(), proto);
}

次に、その C 文字列がopen()関数の引数として使用されます。問題は、stlportを使用すると、ReadProtoFromTextFile関数が無効な C 文字列を受け取るため、ファイルを開くことができないことです。その無効な C 文字列は決定論的であり、常に次の文字列です。

p!&\xffffffe8.

コードから c_str() を呼び出そうとすると、常に有効です。LLDB で問題のある文字列を調べようとしたところ、次のエラーが発生しました: エラー: ターゲットで実行する式を準備できませんでした

それでも、その文字列の内部構造を確認することは可能であり、問​​題のある文字列シーケンスがフィールドに存在し_M_buffers._M_end_of_storageます。正しい順序も にあり_M_buffers._M_start_of_storageます。

gnustlの実装に切り替えたところ、問題はなくなりました。そして、LLDB は問題なく .c_str() を示しました。私にとっては、インライン化の問題のように見えますが、何が原因でしょうか? 結局のところ、 stlport_sharedは Google が推奨する実装です。

4

0 に答える 0