加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

表达式不是一个整体常量clang libc线程

发布时间:2020-12-16 05:04:47 所属栏目:百科 来源:网络整理
导读:我正在尝试在我的 linux机器(ubuntu)上编译一个非常简单的线程程序,但即使我指定了libc,clang似乎仍然会向我抛出错误.我的计划是: #include iostream#include threadvoid call_from_thread() { std::cout "Hello,World!" std::endl;}int main(){ std::threa
我正在尝试在我的 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会使用这个库来编译线程.任何帮助表示赞赏!

解决方法

在某些(早期)版本的libc中,某些函数未标记为constexpr,这意味着它们不能在static_assert中使用.您应该检查system_clock :: duration :: min()实际上是那样标记的. [你可能需要查看numeric_limits,因为我似乎记得那就是问题所在]

好消息是,如果这是问题所在,那么您可以自己将constexpr添加到数字限制头文件中;它不会引起任何其他问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读