为啥这段代码不能用 clang 构建,用 gcc 崩溃,但用 VC++ 运行良好? [复制]
Posted
技术标签:
【中文标题】为啥这段代码不能用 clang 构建,用 gcc 崩溃,但用 VC++ 运行良好? [复制]【英文标题】:Why this code doesn't build with clang, crashes with gcc, but runs fine with VC++? [duplicate]为什么这段代码不能用 clang 构建,用 gcc 崩溃,但用 VC++ 运行良好? [复制] 【发布时间】:2014-11-23 23:47:48 【问题描述】:这段代码:
#include <iostream>
#include <future>
int main()
std::async([]std::cout << "hello\n";).get();
运行良好并使用 Visual C++ 2013 打印 hello
,但在 gcc 生成时抛出异常:
terminate called after throwing an instance of 'std::system_error'
what(): Unknown error -1
甚至不使用 clang 构建,产生以下错误消息:
/usr/bin/ld: /tmp/source-83f28e.o: undefined reference to symbol 'pthread_setspecific@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我使用rexter 运行测试。你能解释一下这种行为吗?
编辑
使用-pthread
编译器选项 gcc 版本运行良好,clang 版本现在构建并生成:
hello
exception_ptr not yet implemented
【问题讨论】:
你使用过-pthread
标志吗?
这并不是真正的“崩溃”。
@juanchopanza 标记为重复这是正确的,尤其是在事后诸葛亮的帮助下。 Clang 错误消息导致链接器选项,但 gcc 消息 - 根本没有。
【参考方案1】:
为了添加对多线程的支持,您需要链接 pthread 库。这是 GCC 和 Clang 上的 -pthread
(作为内置标志提供)。或者,-lpthread
可以解决问题。
【讨论】:
以上是关于为啥这段代码不能用 clang 构建,用 gcc 崩溃,但用 VC++ 运行良好? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
FreeBSD 为啥要废弃 GCC 改用 Clang/LLVM
为啥 GCC 不能消除多个继承函数的歧义(但 clang 可以)? [复制]