文章大图来源: 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
运行生成可执行文件,发现多线程程序运行成功:
可是我们还没有成功解决如何在 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 ~
参考
VS Code在ubuntu中执行多线程程序时报错:undefined reference to `pthread_create
编译多线程程序linux命令