Ubuntu 18.04 VS Code 运行 C++ 多线程程序

文章大图来源: pixiv_id=105845465

Ubuntu 对应 gcc 版本

我之前配置的 VMWare 虚拟机采用的操作系统为 Ubuntu 18.04,对应的 g++ 版本为 g++ 7.5.0

Ubuntu 下 VS Code 运行 C++ 多线程报错

假设写了如下 C++ 多线程程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <thread>

void foo(){
std::cout << "foo() start, thread id = " << std::this_thread::get_id() << "\n";
std::cout << "Hello, this is Alice Margatroid." << "\n";
std::cout << "foo() end, thread id = " << std::this_thread::get_id() << "\n";
}

int main(){
std::cout << "main() start, thread id = " << std::this_thread::get_id() << "\n";
std::cout << "Hello, this is MarisaMagic." << "\n";

std::thread t(foo);
t.join();

std::cout << "main(), end, thread id = " << std::this_thread::get_id() << "\n";

return 0;
}

在 Ubuntu 环境下用 VS Code 中的 Code Runner 插件运行 C++ 代码会出现如下报错:

1
2
3
4
In function `std::thread::thread<void (&)()>(void (&)())':
test.cpp:(.text._ZNSt6threadC2IRFvvEJEEEOT_DpOT0_[_ZNSt6threadC5IRFvvEJEEEOT_DpOT0_]+0x2f):
undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status

如果选择 生成 C/C++ g++ 生成活动文件 也会报错:

报错原因

在 Ubuntu 平台下创建线程时会调用 pthread_create() 函数,但是 pthread 库不是 Linux 系统默认的库,需要链接到 pthread 库。因此在使用 g++ 编译时,加上链接 pthread 库命令,即可编译成功:

故我们可以打开终端,或者在 VS Code 中打开终端输入如下编译命令:

1
g++ test.cpp -o test -lpthread 

运行生成可执行文件,发现多线程程序运行成功:

1
./test

可是我们还没有成功解决如何在 VS Code 中使用 Code Runner 插件 或者 生成 C/C++ g++ 生成活动文件 运行 C++ 多线程程序。

解决方法

Code Runner 插件配置修改

打开 Code Runner 扩展设置,输入关键词 Executor Map,点击第一个选项中“在 settings.json 中编辑”。

打开之后,看到如下界面。然后在 “cpp” 那一行的编译命令中,增加 -lpthread 链接命令并保存即可。

1
"cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt -lpthread && $dir$fileNameWithoutExt"

修改后大致如下图所示:

之后点击右上角 Code Runner 插件 运行代码的按钮就可以运行成功 DA⭐ZE~

生成 C/C++ g++ 生成活动文件配置修改

键盘按下 “Ctrl + Shift + P”,打开命令面板。输入关键词 “Tasks” 找到 “Tasks: Configure Default Build Task” 点开。

点开之后选择 “C/C++: g++ 生成活动文件”,会自动生成一个编译配置文件 tasks.json 。

在编译配置文件中找到 “args”,也就是执行编译命令时加入的参数。增加一条 “-lpthread”,保存文件即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++ 生成活动文件",
"command": "/usr/bin/g++",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}",
"-lpthread"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "编译器: /usr/bin/g++"
}
]

修改配置后如下图所示:

之后使用 生成 C/C++ g++ 生成活动文件 也可以运行成功 DA⭐ZE ~

参考

  1. VS Code在ubuntu中执行多线程程序时报错:undefined reference to `pthread_create

  2. 编译多线程程序linux命令


Ubuntu 18.04 VS Code 运行 C++ 多线程程序
https://marisamagic.github.io/2024/12/15/20241215/
作者
MarisaMagic
发布于
2024年12月15日
许可协议