簡體   English   中英

如何用 c++ 編譯<execution>標准庫</execution>

[英]How to compile with c++ <execution> standard library

問題

我正在嘗試使用標准算法庫中的執行策略。 但是,當我嘗試編譯時,我收到以下錯誤消息

c:\mingw\lib\gcc\mingw32\9.2.0\include\c++\pstl\parallel_backend_tbb.h:19:10: fatal error: tbb/blocked_range.h: No such file or directory

在查看了諸如thisthis等各種其他相關問題后,我了解到execution庫依賴於一個名為tbb的軟件。 此外,為了編譯使用<execution>的代碼,必須手動鏈接到tbb 我的問題正是如何下載tbb並將其鏈接到使用<execution>的腳本。

我相信我在如何下載正確的文件然后鏈接到它們方面存在一些嚴重的缺陷。 我將首先列出我對鏈接過程的理解,然后我將解釋我嘗試解決的問題。 我選擇了這種格式,以便人們可以更快地回答我的問題以指出問題所在。 我會盡量保持簡潔。

我的理解

  • 代碼組織在 header 和cpp文件中,其中前者通常只包含軟件接口,后者包含實現
  • cpp文件可以預編譯並分組到單個庫文件中
  • 對於用戶然后使用庫,他們必須在他們的腳本中#include header/s,並告訴編譯器 header 文件以及庫文件的位置
  • 這可以通過-I標頭和-L-l庫文件來完成
  • -L提供庫文件的位置, -l指定使用哪些庫

我試過的

我嘗試編譯的腳本是:

#include <execution>

int main() {

std::execution::par;

return 0;

}

g++ script.cpp -o out -I C:(path to the headers) -L C:(path to the library) -l (name of library) -std=c++17

我還應該提到我正在嘗試在 Windows 10 上執行此操作

第一次嘗試

我很難理解在哪里可以找到 header 和tbb的庫文件。

在英特爾TBB 入門網頁中,github 存儲庫被列為“TBB 可用”。 由於我習慣於僅包含標頭的庫,因此我認為所有內容都在包含目錄中,但那里沒有.dll文件。 現在我的理解是,我必須自己為我的特定系統編譯 DLL,這是有意義的。 我使用cmake遵循以下過程:

# Do our experiments in /tmp
cd /tmp
# Clone oneTBB repository
git clone https://github.com/oneapi-src/oneTBB.git
cd oneTBB
# Create binary directory for out-of-source build
mkdir build && cd build
# Configure: customize CMAKE_INSTALL_PREFIX and disable TBB_TEST to avoid tests build
cmake -DCMAKE_INSTALL_PREFIX=/tmp/my_installed_onetbb -DTBB_TEST=OFF ..
# Build
cmake --build 
# Install
cmake --install .
# Well done! Your installed oneTBB is in /tmp/my_installed_onetbb

但是在cmake --build步驟中, cmake不接受該命令,而是請求更多選項。 其中一個是dir選項,我為此創建了另一個目錄並提供了它,但隨后出現錯誤消息Error: could not load cache打印出來。

無論如何,已經創建了一些文件,所以我搜索了.dll文件但找不到它。

第二次嘗試

我按照此處的建議下載了 Intel oneAPI Base Toolkit。 ../Program Files (x86)/Intel/oneAPI安裝后,我在C:\Program Files (x86)\Intel\oneAPI\tbb找到了特定的tbb工具,我將此地址用於-I-L標志但初始錯誤消息仍然存在。

我還將目錄C:\Program Files (x86)\Intel\oneAPI\tbb\2021.6.0到腳本的本地目錄,這樣我就可以與-flag tbb\2021.6.0鏈接,但沒有運氣

非常感謝

@HolyBlackCat @Stamatis

是的,你是對的。 通過使用 package mingw-w64-tbb。 您可以使用 -ltbb12 代替 -ltbb。 由於庫文件與 ltbb12 相關。

要使用 -ltbb 選項,您應該設置 Intel oneAPI 環境。 它可以通過下載 Intel oneAPI Base Toolkit 來使用。您可以通過使用以下命令獲取 setvars.sh 文件來設置環境。

源 /opt/intel/oneapi/setvars.sh

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM