天天看點

Linux 下編譯 Thread Building Blocks TBB

不得不說,什麼庫如果不自己編譯一遍,完全不知道什麼坑

就拿TBB來說吧,部落格上很多人都試過,也都成功過,我想照抄都不行。就連庫上下載下傳的代碼都不一樣。後來才發現,庫都不是同一個。

行吧,既然如此,認了吧!

首先,下載下傳庫,我用的是這個:(千萬不要去下載下傳master,找個releases下吧,master上的未必能編譯過,而且那個不是普通使用者的)

https://github.com/oneapi-src/oneTBB/releases/tag/v2020.3

第二,解壓編譯

Linux 下編譯 Thread Building Blocks TBB

解壓後裡面就是一堆目錄檔案了,看到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的檔案都扔了吧。

庫生成好了,大功告成!

繼續閱讀