如果您在Linux上与GCC编译器一起使用C++线程(或者更准确地说,它是libstdc++ C++标准库附带的),那么您可以在构建过程中使用选项来获得要编译和链接的内容。
我想知道的是,哪个库头调用了这个需求?#include <thread>是一个明显的要求,但是是否还有其他标准库标头隐含地对libstdc++具有线程依赖关系?
发布于 2020-05-29 20:11:36
<thread> <mutex> <condition_variable> <future> <shared_mutex> <stop_token>都使用线程类型和函数。
网络TS标头(如<experimental/net>和<experimental/executor> )使用<mutex>和<future>,因此它们也依赖于线程。
我们很快就会添加更多的并发头,比如<latch> <barrier> <semaphore>。
基本上,任何与并发和同步有关的东西,,除了 <atomic>之外,它都不依赖于来自线程的任何东西。
发布于 2020-05-14 20:30:13
这不是头文件,而是特定的功能。在引擎盖下创建线程的任何东西都需要或很大程度上受益于与-lpthread的链接,例如std::async来自<future>。
发布于 2020-05-14 19:49:13
在版本10之前的Solaris上,errno是单线程构建中的一个全局变量,但在多线程构建中是一个扩展为函数调用的宏。当人们不知不觉地将多线程应用程序与单线程库连接起来时,这就是问题的根源之一。有关更多详细信息,请参阅编译多线程代码。
在Linux上,errno始终是一个宏,扩展为一个函数调用,该函数调用读取特定于线程的errno,而不管是否指定了-pthread。
使用-pthread编译定义了宏_REENTRANT,但是GNU和C++标准库头中没有一个使用该宏。Boost库确实使用它。
https://stackoverflow.com/questions/61803954
复制相似问题