C/C++ Linux (Raspbian) 中的线程在 Windows 上使用 VS2019 10 -pthread - 无法编译
C/C++ Threading in Linux (Raspbian) using VS2019 on Windows 10 -pthread - Can't compile
我正在尝试进行我的第一部分线程处理,但无论我尝试了什么,我都无法编译它。
我已经回去尝试编译一些演示代码,但我遇到了与我的程序相同的问题。
如果我 运行 一个简单的打印 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 天时间来整理它!
我正在尝试进行我的第一部分线程处理,但无论我尝试了什么,我都无法编译它。
我已经回去尝试编译一些演示代码,但我遇到了与我的程序相同的问题。
如果我 运行 一个简单的打印 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 天时间来整理它!