[英]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
在查看了諸如this或this等各種其他相關問題后,我了解到execution
庫依賴於一個名為tbb
的軟件。 此外,為了編譯使用<execution>
的代碼,必須手動鏈接到tbb
。 我的問題正是如何下載tbb
並將其鏈接到使用<execution>
的腳本。
我相信我在如何下載正確的文件然后鏈接到它們方面存在一些嚴重的缺陷。 我將首先列出我對鏈接過程的理解,然后我將解釋我嘗試解決的問題。 我選擇了這種格式,以便人們可以更快地回答我的問題以指出問題所在。 我會盡量保持簡潔。
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.