使用-march编译会导致线程说;纯虚拟方法称为; 我试图通过GCC编译一个C++树莓PI 3代码,代码为< >三月= ARMV8 A/标志。但是,使用此标志会导致线程失败,原因是说纯虚拟方法名为。我知道它是-march=armv8-a标志,因为当我在没有它的情况下编译它时,线程会重新开始工作
请注意:线程甚至没有启动,它只提供了一个名为 有人能在Raspberry Pi 3上用使用-march编译会导致线程说;纯虚拟方法称为; 我试图通过GCC编译一个C++树莓PI 3代码,代码为< >三月= ARMV8 A/标志。但是,使用此标志会导致线程失败,原因是说纯虚拟方法名为。我知道它是-march=armv8-a标志,因为当我在没有它的情况下编译它时,线程会重新开始工作,c++,linux,multithreading,gcc,raspberry-pi,C++,Linux,Multithreading,Gcc,Raspberry Pi,请注意:线程甚至没有启动,它只提供了一个名为 有人能在Raspberry Pi 3上用-march=armv8-a编译这篇文章并报告他们得到了什么吗 #include <iostream> #include <thread> #include <unistd.h> void threadedFunction() { std::cout << "Hello from thread" << std::endl; } int ma
-march=armv8-a
编译这篇文章并报告他们得到了什么吗
#include <iostream>
#include <thread>
#include <unistd.h>
void threadedFunction()
{
std::cout << "Hello from thread" << std::endl;
}
int main()
{
std::thread t1(threadedFunction);
sleep(2);
return 0;
}
#包括
#包括
#包括
void threadedFunction()
{
std::cout由于armv8-a
使用64位体系结构,因此使用-march=armv8-a
标志将为64位机器编译。但是,许多树莓皮OS(图像)是32位的,可能会导致崩溃或错误
信用证:为什么你们都detach()
ing和join()
ing一个线程?@KevinDuarte它仍然是错误的。这样做应该会得到一个例外,因为一旦你detach
ed,你就不能加入。@KevinDuarte:“调用detach*之后,这个不再拥有任何线程。”如果在删除detach()时问题消失
,我猜是未定义的行为。与gcc相比,您的代码更有可能存在bug。gcc是一个编译器,世界各地都使用它来编译数千个多线程程序,并且具有广泛的内部测试套件。仅仅因为某个特定的编译器选项导致代码崩溃,并不一定意味着它是一个问题编译器选项。例如,编写一些与-O2
崩溃的代码应该不会太难。问题不在于此编译器选项,而在于错误代码。查找代码中的错误,而不是编译器中的问题。我发现gcc不太可能有这样一个常见的错误,这是由如此微不足道的代码所表现出来的代码。更有可能的是,您使用的gcc存在某种配置或安装问题。可能一些运行库没有安装,或者链接了错误的库。不幸的是,stackoverflow.com上只有一个用户知道您的gcc安装的详细信息,即它是如何配置的。当然,那个用户就是你。