微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Windows 10 上使用 VS2019 的 Linux (Raspbian) 中的 C/C++ 线程 -pthread - 无法编译

如何解决在 Windows 10 上使用 VS2019 的 Linux (Raspbian) 中的 C/C++ 线程 -pthread - 无法编译

我正在尝试进行我的第一次线程处理,但无论我尝试过什么,我都无法编译。

我已经回去尝试编译一些演示代码,但遇到了与我的程序相同的问题。

如果我运行一个简单的打印 hello world 它可以很好地编译和部署程序,我可以简单地导航到并直接在 Pi4 上运行它。

线程演示代码

#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>


pthread_t tid[2];

void* doSomeThing(void* arg)
{
    unsigned long i = 0;
    pthread_t id = pthread_self();

    if (pthread_equal(id,tid[0]))
    {
        printf("\n First thread processing\n");
    }
    else
    {
        printf("\n Second thread processing\n");
    }

    for (i = 0; i < (0xFFFFFFFF); i++);

    return NULL;
}

int main(void)
{
    int i = 0;
    int err;

    while (i < 2)
    {
        err = pthread_create(&(tid[i]),NULL,&doSomeThing,NULL);
        if (err != 0)
            printf("\ncan't create thread :[%s]",strerror(err));
        else
            printf("\n Thread created successfully\n");

        i++;
    }

    sleep(5);
    return 0;
}

当我编译时我得到

Error       /home/pi/projects/cpp_raspbian_thread_101/obj/x64/Debug/main.o: in function `main':
Error       undefined reference to `pthread_create'
Error       ld returned 1 exit status

为了解决这个问题,我尝试将 -pthread 或 -lpthread 添加到 项目 > 属性 > 配置属性 > C/C++ > 命令行 > 附加选项

那没有任何作用,我不确定这是否是放置它的正确位置。 我是在 VS2019 中构建的,所以我不是从命令行构建的,我不知道在哪里添加这个参数。

我也尝试过在 NuGet 中安装 pthreads,但这没有帮助。

VSCode 之类的其他软件似乎有可以将其添加到其中的文件,但我在 VS2019 中迷失了

感谢任何帮助。

编辑:

感谢回复

好的,因为@Eljay 建议我尝试使用 std::thread(再次)但有同样的问题。

// thread example
#include <iostream>       
#include <thread>         

void foo()
{
    // do stuff...
}

int main()
{
    std::thread first(foo);     
    return 0;
}

日志文件

  Validating sources
  copying sources remotely to '10.0.0.2'
  Validating architecture
  Validating architecture
  Starting remote build
  Compiling sources:
  main.cpp
  Linking objects
/usr/bin/ld : error : /home/pi/projects/cpp_raspbian_thread_101/obj/ARM/Debug/main.o: in function `std::thread::thread<void (&)(),void>(void (&)())':
/usr/include/c++/8/thread(135): error : undefined reference to `pthread_create'
collect2 : error : ld returned 1 exit status

所以我又回到了 pthread_create 问题

解决方法

好的,现在两个代码示例都可以编译并运行了。

正如我最初的想法,我需要在 VS2019 的某处添加 -pthread,但我把它放在了错误的部分。

前往 项目属性 > 配置属性 > 链接器 > 命令行

将 -pthread 添加到其他选项框并应用。

我希望能节省别人花我 3 天的时间整理它!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。