不得不說,什麼庫如果不自己編譯一遍,完全不知道什麼坑
就拿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/u010793236/article/details/74010571?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160645280919724848147948%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160645280919724848147948&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-8-74010571.first_rank_ecpm_v3_pc_rank_v2&utm_term=tbb++%E7%BC%96%E8%AF%91&spm=1018.2118.3001.4449
這個錯,部落客是注釋掉這幾行,我在想,有沒有辦法保留?注釋掉會不會有其它問題?比如功能缺少功能?加速不足?
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的檔案都扔了吧。
庫生成好了,大功告成!