6

Linuxマシン(ubuntu)で非常に単純なスレッドプログラムをコンパイルしようとしていますが、libc ++を指定してもclangがエラーをスローするようです。私のプログラムは次のとおりです。

#include <iostream>
#include <thread>

void call_from_thread() {
    std::cout << "Hello, World!" << std::endl;
}

int main()
{
    std::thread t1(call_from_thread);

    t1.join();
    return 0;
}

メイクファイル:

CC=clang++
CFLAGS=-std=c++11 -stdlib=libc++ -pthread -c -Wall
#proper declaration of libc++, but still an error...
LDFALGS=
SOURCES=main.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=bimap

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
        $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
        $(CC) $(CFLAGS) $< -o $@

特定のエラー:

In file included from main.cpp:2:
In file included from /usr/include/c++/4.6/thread:37:
/usr/include/c++/4.6/chrono:666:7: error: static_assert expression is not an
      integral constant expression
      static_assert(system_clock::duration::min()
      ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make: *** [main.o] Error 1

なぜclangがlibc ++を使用していないのかわかりません.なぜなら、私が間違っていなければ、clangはこのライブラリを使用してスレッドをコンパイルするからです. どんな助けでも大歓迎です!

4

1 に答える 1

7

libc++ の一部の (以前の) バージョンでは、一部の関数が としてマークされていconstexprませんでしたstatic_assertsystem_clock::duration::min()実際にそのようにマークされていることを確認する必要があります。numeric_limits[そこに問題があったことを思い出すので、おそらくチェックアウトする必要があります]

幸いなことに、それが問題である場合はconstexpr、数値制限ヘッダー ファイルに自分で追加できます。他の問題を引き起こすことはありません。

于 2013-05-26T16:46:46.287 に答える