Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)

Win10+mingw64+VSCode条件下编译和使用TBB

  • Win10+mingw64条件下编译和使用TBB
  • 编译TBB
  • 环境变量的设置
  • TBB使用示例
  • 总结与展望

Win10+mingw64条件下编译和使用TBB

本文记录在Win10系统中使用mingw64对并行库Intel TBB进行编译和使用的步骤。本文时间为2020年3月12日,以上各个软件的版本均为当前较新版本。

编译TBB

  1. TBB下载地址https://github.com/intel/tbb。在其中选择了ZIP格式下载。
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第1张图片
    下载完毕后解压后得到TBB的文件夹如下图。
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第2张图片
  2. 执行编译命令。打开命令行,进入TBB文件夹,执行命令mingw32-make compiler=gcc arch=intel64。
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第3张图片
    注意本文使用的是mingw64,如果是MinGW,则使用的编译命令应该是mingw32-make compiler=gcc arch=ia32 runtime=mingw tbb。mingw64和MinGW这二者应该不能混淆。
    当然,作为小白我要说一下,要像这样使用mingw32-make,需要事先把mingw64下的bin文件夹加入环境变量Path。
  3. 编译成功。在我这,以上一条命令就可以完成编译。编译后将生成一个文件夹,位置及内容见下图。在此提一下,这个文件夹中的内容应该是我们以后使用TBB的程序在运行时会需要的动态库等。我觉得其中最重要的文件应该是tbb.dll,不知道别的文件是不是也必不可少。
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第4张图片

环境变量的设置

以下环境变量及相关作用由TBB编译后生成的文件夹中的 tbbvars.bat 里的内容猜想及测试而来。
(文件夹 D:\Program Files\tbb-tbb_2020\build\windows_intel64_gcc_mingw8.1.0_release)
Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第5张图片

  1. CPATH变量。由于在编辑及编译的过程中需要使用tbb提供的头文件,为了正确地找到这些头文件,一种比较一劳永逸的办法是将tbb的头文件所在的目录添加到环境变量CPATH中。(设置这个变量后,在编译时就不需要使用 -I 选项来给g++命令指定头文件了。这个环境变量从前没有用过,看样子可能是 mingw64 编译时会自动去找这个变量所指的文件夹中去找头文件?)
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第6张图片
  2. LIBRARY_PATH变量。编译过程中我们写的tbb程序还依赖于编译生成的 tbb.dll 等文件,将这些文件所在的目录 D:\Program Files\tbb-tbb_2020\build\windows_intel64_gcc_mingw8.1.0_release 添加到LIBRARY_PATH,则可以在使用g++命令时不必再用 -L 选项来指定使用的动态库。
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第7张图片
  3. Path变量。我们写的tbb程序在运行时同样要依赖于 tbb.dll 等,为了在运行我们的程序时让系统自动识别加载这些库,可以将 tbb.dll 所在的目录加入Path变量(放在PATH中最上面最好)。这一步设置后,在程序运行时,将从Path变量中找所需的依赖库,如果不如此设置,应该是需要在g++ 命令中使用 -Wl,-rpath= 选项来设置程序启动时的路径,从而达到相同的效果(不过我不了解,万一我们编的程序除了tbb库外还需要别的库,-Wl有没有办法处理。。。)。
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第8张图片
    如上设置环境变量后,可以使得编译和运行较为方便。

TBB使用示例

  1. 代码编辑。创建文件a.cpp,添加代码内容如下。(内容来自https://blog.csdn.net/dwosion/article/details/72724371)
#include 
#include 

using namespace std;
using namespace tbb;
int main()
{
    parallel_for(0, 10, [](int num) {cout << num << ":hello tbb " << endl; });
    getchar();
    return 0;
}
  1. 编译。进入代码所在文件夹,执行命令 g++ a.cpp -ltbb进行编译。因为之前设置过相关的环境变量,在此处不需要 -I、-L、-Wl等命令,给我们的编译带来了一定的方便。
    编译过程中出现一个warning,我在初学阶段,并不知道是什么意思,不过发现可执行文件a.exe已经生成,并可以运行。
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第9张图片
  2. 运行。直接双击生成的a.exe,应该就可以运行了。这里应该是Path变量中的库目录起了作用。
    Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)_第10张图片

总结与展望

  1. 使用mingw64可以对TBB源码进行编译,在适当地设置环境变量后,可以帮助我们方便地进行并行程序的编写。
  2. 各个环境变量的功能应该还可以移植到别的库与项目中。
  3. 我之前使用的编辑工具为VSCode,在进行较多文件的编译时,用makefile进行编译,环境变量的设置可以使得今后TBB编程中makefile更容易写。
    题外话,我想说,makefile 是最难的编程语言。。。

你可能感兴趣的:(Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!))