0

サンプルコードを実行してみました。
しかし、予期せぬことが起こりました。
libc++ と一緒に使用される boost.thread について既知の問題があるのだろうか?


オプションを指定して、または指定せずにコンパイルされたプログラム-std=c++11は正常に動作します。

しかし、-stdlib=libc++またはでコンパイルすると、-std=c++11 -stdlib=libc++
出力は次のようになりました。

in main
in thread
bash: line 1: 37501 Segmentation fault: 11  ./a.out

コンパイラ:
Apple LLVM バージョン 4.2 (clang-425.0.28) (LLVM 3.2svn ベース)
ターゲット: x86_64-apple-darwin12.3.0
スレッド モデル: posix

OS: Mac OS X 10.8.3

サンプル コードは非常に単純です。

#include "stdio.h"
#include <boost/thread/thread.hpp>

class callable
{
public:
    void operator()()
    {
        printf("in thread\n");
    }
};

int main()
{
    boost::thread t = boost::thread(callable());
    printf("in main\n");
    t.join();
    return 0;
}
4

1 に答える 1

0

boost.thread はおそらく libstdc++ にリンクされています。libstdc++ と libc++ には互換性のない ABI があります。1 つのプログラムで両方を使用しないでください。

于 2013-06-20T19:30:51.690 に答える