gpt4 book ai didi

c++ - std::async with gcc 7.2 需要 pthread 链接选项

转载 作者:行者123 更新时间:2023-11-27 23:48:12 25 4
gpt4 key购买 nike

下面的代码需要pthread链接选项才能编译,我不明白为什么。你有什么想法吗?

我正在使用 gcc 7.2.0

#include <future>

int sum = 0;

void func()
{
for(int i=0; i < 10; ++i)
sum +=i;
}

int main()
{
std::future<void> f = std::async(std::launch::async, func);
return 0;
}

编译

g++ -o test test.cpp

提供以下错误

/tmp/ccoEkyeZ.o: dans la fonction « std::thread::thread<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (*)()> >, void>::_Async_state_impl(std::thread::_Invoker<std::tuple<void (*)()> >&&)::{lambda()#1}>(std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (*)()> >, void>::_Async_state_impl(std::thread::_Invoker<std::tuple<void (*)()> >&&)::{lambda()#1}&&) »:
test.cpp:(.text._ZNSt6threadC2IZNSt13__future_base17_Async_state_implINS_8_InvokerISt5tupleIJPFvvEEEEEvEC4EOS8_EUlvE_JEEEOT_DpOT0_[_ZNSt6threadC5IZNSt13__future_base17_Async_state_implINS_8_InvokerISt5tupleIJPFvvEEEEEvEC4EOS8_EUlvE_JEEEOT_DpOT0_]+0x30): référence indéfinie vers « pthread_create »
collect2: error: ld returned 1 exit status

使用时

g++ -o test test.cpp -lpthread

没有问题。

这正常吗?我错过了什么吗?我的代码在某处没有 pthread_create

最佳答案

您的 代码可能没有 pthread_create但想一想异步处理实际上需要什么。

几乎可以肯定的是,异步函数将在单独的线程中运行,这样它就可以与主代码异步运行。您的错误消息包含文本 std::thread 的事实应该很明显几次。

并且,在您的环境中,似乎 std::thread在幕后使用 pthreads。

这与包含 cout << someInt 的代码没有什么不同它可能会提示缺少 itoa -like 函数,用于进行整数到字符串的转换。如果它包含流但没有标准转换但概念仍然有效,您的设置可能会严重损坏。

可执行文件必须有权访问您显式调用的所有内容,加上所有其他需要的依赖项。


就其值(value)而言,gcc docs 涵盖了(尽管含糊不清) (我的重点):

When you link a multithreaded application, you will probably need to add a library or flag to g++. This is a very non-standardized area of GCC across ports. Some ports support a special flag (the spelling isn't even standardized yet) to add all required macros to a compilation (if any such flags are required then you must provide the flag for all compilations not just linking) and link-library additions and/or replacements at link time. The documentation is weak.

On several targets (including GNU/Linux, Solaris and various BSDs) -pthread is honored.

关于c++ - std::async with gcc 7.2 需要 pthread 链接选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48847236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com