2017-03-17 4 views
1

C++ 1zモードでboost 3.9を使用してboostをコンパイルしようとすると、auto_ptrがC++ 17で削除されたため、エラーが発生しました。しかし、私は正常にC++ 14モードでboostをコンパイルし、libファイルをC++ 1zモードでコンパイルされた実行可能ファイルにリンクしました。だから将来的にABIの問題や潜在的なバグがありますか?clang 3.9、auto_ptr and boost

+1

あなたは 'auto_ptr'の使用を止めるべきです。それは 'unique_ptr'(または多分' shared_ptr')に置き換えられました。 –

+1

@もちろん、auto_ptrを使用するboostライブラリですので、コンパイルを渡すためにC++ 14モードに切り替えてから、C++ 1z実行可能ファイルにリンクする必要があります。 – Krys

+0

@chris、ありがとうございます。 – Krys

答えて

1

auto_ptrにはABIの問題はありません。ヘッダーのみの機能なので、libC++。dylibには何もありません。

auto_ptrをlibC++に戻すには、libC++ヘッダーを含める前に_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTRを定義します。

最良の解決策は、使用しているブーストライブラリのメンテナに、auto_ptrを使用しないようにC++用にコンパイルすることです。

+0

しかしauto_ptrではABIの問題だけでなく、異なるコンパイラフラグを持つ2つのターゲットファイルが結合されています。ただし、C++ 1zモードでマクロを適用すると、ABIの懸念なしに作業を実行する必要があります。そして、知識を共有してくれてありがとう。 – Krys

+0

2つのターゲットファイルを異なるコンパイラフラグと組み合わせると問題が発生します。時々、彼らはリンクしません( '-arch i386'と' -arch x86_64'、例えば)。時々、彼らはうまくいくでしょう(上記の例)。場合によっては、ある特定の呼び出しを行うまで動作するように見えます( '-d _LIBCPP_ABI_ALTERNATE_STRING_LAYOUT')。 –

関連する問題