不得不说,什么库如果不自己编译一遍,完全不知道什么坑
就拿TBB来说吧,博客上很多人都试过,也都成功过,我想照抄都不行。就连库上下载的代码都不一样。后来才发现,库都不是同一个。
行吧,既然如此,认了吧!
首先,下载库,我用的是这个:(千万不要去下载master,找个releases下吧,master上的未必能编译过,而且那个不是普通用户的)
https://github.com/oneapi-src/oneTBB/releases/tag/v2020.3
第二,解压编译
解压后里面就是一堆目录文件了,看到Makefile,心里开心多了。
直接在解压后的目录下,有build、src等,关键是有个Makefile。
键入: make
结果发现报错了。
build/common.inc:74:*** "" isnot supported. Add build/.inc file with os-specific seetings . Stop
显然,是说os选择配置问题。打开common.inc 看74行,
error tbb_os is not supported……………………云云
那就是说tbb_os没有给对了。那就找到这个变量,在这个文件第15行,往下有几个判断语句。
ifndef tbb_os
# Windows sets environment variable OS; for other systems, ask uname
ifeq ($(OS),)
OS:=$(shell uname)
ifeq ($(OS),)
$(error "Cannot detect operating system")
endif
export tbb_os=$(OS)
endif
ifeq ($(OS), Windows_NT)
export tbb_os=windows
endif
ifeq ($(OS), Linux)
export tbb_os=linux
endif
ifeq ($(OS), Darwin)
export tbb_os=macos
endif
endif # !tbb_os
显然,要求有这个变量,那么就加一个吧;
键入:make -j tbb_os=linux
(-j是使用多线程,加快编译)
然后………………还是错…………,这个时候,跟另外一个教程对上了。
这个错,博主是注释掉这几行,我在想,有没有办法保留?注释掉会不会有其它问题?比如功能缺少功能?加速不足?
https://blog.csdn.net/xiaoting451292510/article/details/106782342
这篇文章里说了很多编译选项。-mrtm应该是cpu性能的一项。既然本机不支持,暂先去掉。
直接去掉不知道会不会有问题,那我就把前几行的-fopenmp放到-mrtm这里,就相当于-fopenmp被写了两次,应该也不会错。openmp是并行计算的库,感兴趣可以另外看,也可以实现并行加速。
继续键入:make -j tbb_os=linux
几秒钟,搞定了,提示编译完成,在build里有了。so和.so.2等文件。把其它.d .o的文件都扔了吧。
库生成好了,大功告成!