C++ 1zモードでboost 3.9を使用してboostをコンパイルしようとすると、auto_ptrがC++ 17で削除されたため、エラーが発生しました。しかし、私は正常にC++ 14モードでboostをコンパイルし、libファイルをC++ 1zモードでコンパイルされた実行可能ファイルにリンクしました。だから将来的にABIの問題や潜在的なバグがありますか?clang 3.9、auto_ptr and boost
答えて
auto_ptr
にはABIの問題はありません。ヘッダーのみの機能なので、libC++。dylibには何もありません。
auto_ptr
をlibC++に戻すには、libC++ヘッダーを含める前に_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR
を定義します。
最良の解決策は、使用しているブーストライブラリのメンテナに、auto_ptr
を使用しないようにC++用にコンパイルすることです。
しかしauto_ptrではABIの問題だけでなく、異なるコンパイラフラグを持つ2つのターゲットファイルが結合されています。ただし、C++ 1zモードでマクロを適用すると、ABIの懸念なしに作業を実行する必要があります。そして、知識を共有してくれてありがとう。 – Krys
2つのターゲットファイルを異なるコンパイラフラグと組み合わせると問題が発生します。時々、彼らはリンクしません( '-arch i386'と' -arch x86_64'、例えば)。時々、彼らはうまくいくでしょう(上記の例)。場合によっては、ある特定の呼び出しを行うまで動作するように見えます( '-d _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT')。 –
- 1. std :: auto_ptr、delete [] and leaks
- 2. Boost :: any and polymorphism
- 3. Clang AST Matcherの "AND"と "OR"
- 4. 共有メモリ内のboost :: lockfree :: queueの問題(boost 1.53、gcc 4.7.2/clang 3.0-6ubuntu3)
- 5. auto_ptrとdynamic_pointer_cast
- 6. let's go of auto_ptr
- 7. clang ++/libC++でBoost libstdC++依存関係を削除しますか?
- 8. static_assertおよびboost :: hanaに関するClangのコンパイルエラー
- 9. なぜclangはBoost for STLを混乱させますか?
- 10. clang ++/libC++でBoostをコンパイル/リンクするには?
- 11. 参照とauto_ptrを
- 12. auto_ptrを<Base>からauto_ptrにキャスト<Derived>
- 13. セマンティック意味:: auto_ptrをブースト:: shared_ptrの
- 14. Travis-CIにLLVM/Clang/libC++バージョン3.9をインストールするにはどうすればいいですか?
- 15. clang-3.9でobjective-cのReturn Stmtを取得するにはどうすればよいですか?
- 16. jOOQ 3.9アップデートによるオーバーライドエラー
- 17. auto_ptrをフレンドクラスにする
- 18. auto_ptrを前方宣言
- 19. C++のauto_ptrのポインタ演算
- 20. clangとApple clangの違いは?
- 21. シングルトンとauto_ptrでのPIMPLの使用
- 22. 未定義テンプレートの暗黙のインスタンス化:Boost BugまたはClang Bug?
- 23. コルーチンでラップされたboostタイマータイマーがclang-5.0でSEGFAULTを引き起こす
- 24. MicrosoftのClang/C2でBoostライブラリを構築するためのb2のコマンドパラメータ
- 25. Clang/MacOS X
- 26. ベクトル内のauto_ptrへのポインタを格納
- 27. ATL CAutoPtrとSTL std :: auto_ptrの違いは?
- 28. clangの関数をベクトル化する
- 29. Clang(3.8)とAndroid NDKのビルドブースト(1.58)r14b
- 30. python-clang:テンプレート引数の取得
あなたは 'auto_ptr'の使用を止めるべきです。それは 'unique_ptr'(または多分' shared_ptr')に置き換えられました。 –
@もちろん、auto_ptrを使用するboostライブラリですので、コンパイルを渡すためにC++ 14モードに切り替えてから、C++ 1z実行可能ファイルにリンクする必要があります。 – Krys
@chris、ありがとうございます。 – Krys