Tôi có một dự án thử nghiệm nhỏ sử dụng OpenMP để song song hóa. Mục tiêu của tôi là biên dịch nó để nó tạo ra .dll
và .lib
cho các thư viện (vì dự án thực của tôi liên kết với các thư viện bên ngoài được phân phối bằng các loại này), với sự hỗ trợ cho OpenMP 4.5 hoặc mới hơn và thực hiện nó từ dòng lệnh để có thể thực hiện trên docker cho kiểm tra và kiểm tra (phần docker nằm ngoài phạm vi của câu hỏi này, nó chỉ để tham khảo về lý do tại sao tôi cần nó để làm việc từ dòng lệnh). Tôi có thể biên dịch dự án này với các trình biên dịch khác nhau mà tôi không hài lòng:
- MSVC :
mkdir build-msvc
, sau đócmake ..
(từ thư mục mới được tạo) và cuối cùngcmake --build . --config Release
. Điều này biên dịch tốt nhưng chỉ hỗ trợ OpenMP 2.0, do đó không phải là một lựa chọn tốt cho dự án thực sự của tôi. - Intel Parallel Studio :
mkdir build-intel
, sau đócmake .. -T "Intel C++ Compiler 19.0"
(từ thư mục mới được tạo) và cuối cùngcmake --build . --config Release
. Điều này hỗ trợ OpenMP 5.0 nhưng giấy phép của nó khá đắt đối với tôi. - MinGW x64 g ++ :
mkdir build-g++
, sau đócmake .. -G "MinGW Makefiles"
(từ thư mục mới được tạo) và cuối cùngcmake --build .
. Nó hỗ trợ OpenMP 4.5 nhưng trình biên dịch này không tương thích với wiht.lib
(theo như tôi biết) mà tôi đã đề cập là cần thiết đối với tôi.
Tôi đã thử mà không thành công để sử dụng tiếng kêu:
- CLANG từ MSVC :
mkdir build-clang-msvc
, sau đócmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(từ thư mục mới được tạo), nhưng không thành công với lỗi sau:
- Nhận dạng trình biên dịch CXX là Clang 8.0.1 với dòng lệnh giống MSVC - Kiểm tra trình biên dịch CXX đang hoạt động: C: / Tệp chương trình (x86) / Microsoft Visual Studio / 2019 / Cộng đồng / VC / Công cụ / Llvm / bin / clang-cl.exe - Kiểm tra trình biên dịch CXX đang hoạt động: C: / Tệp chương trình (x86) / Microsoft Visual Studio / 2019 / Cộng đồng / VC / Công cụ / Llvm / bin / clang-cl.exe - bị hỏng Lỗi CMake tại C: / Tệp chương trình / CMake / share / cmake-3.15 / Mô-đun / CMakeTestCXXCompiler.cmake: 53 (tin nhắn): Trình biên dịch C ++ "C: / Tệp chương trình (x86) / Microsoft Visual Studio / 2019 / Cộng đồng / VC / Công cụ / Llvm / bin / clang-cl.exe" không thể biên dịch một chương trình thử nghiệm đơn giản. Nó không thành công với đầu ra sau: Thay đổi Dir: C: / Users / [NAME NAME] / source / repos / test_openmp / build-clang-msvc / CMakeFiles / CMakeTmp Chạy Lệnh xây dựng: C: /PROGRA~2/MICROS~1/2019/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_bd131 && [1/2] Xây dựng đối tượng CXX CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj [2/2] Liên kết thực thi CXX cmTC_bd131.exe KHÔNG CÓ: cmTC_bd131.exe cmd.exe / C "cd. &&" C: \ Tệp chương trình \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_bd131.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - bảng kê khai - C: \ PROGRA ~ 1 \ MINGW- ~ 1 \ X86_64 ~ 1.0-P \ mingw64 \ bin \ ld.exe / nologo CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj /out:cmTC1 cmTC_bd131.lib /pdb:cmTC_bd131.pdb /version 0.0 / machine: X86 / debug / INCREMENTAL / subsystem: console kernel32.lib user32.lib gdi32.lib wonpool.lib shell32.lib ole32.lib oleaut32.lib .lib advapi32.lib && cd. " RC Pass 1: lệnh "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" không thành công (mã thoát 0) với đầu ra sau: Hệ thống không thể tìm thấy các tập tin được chỉ định ninja: xây dựng dừng lại: tiểu ban thất bại. CMake sẽ không thể tạo chính xác dự án này. Call Stack (cuộc gọi gần đây nhất trước): CMakeLists.txt: 2 (dự án) - Cấu hình không đầy đủ, xảy ra lỗi! Xem thêm "C: / Users / [NAME NAME] /source/repose/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log". Xem thêm "C: / Users / [NAME NAME] /source/repose/test_openmp/build-clang-msvc/CMakeFiles/CMakeError.log".
- Clang và Ninja ngoài MSVC :
mkdir build-clang-ninja
, sau đócmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(từ thư mục mới được tạo và thay đổiPATH
biến môi trường để không tìm thấy msvc trước), nhưng nó không thành công với lỗi sau:
- Nhận dạng trình biên dịch CXX là Clang 9.0.0 với dòng lệnh giống MSVC - Kiểm tra trình biên dịch CXX đang hoạt động: C: / Tệp chương trình / LLVM / bin / clang-cl.exe - Kiểm tra trình biên dịch CXX đang hoạt động: C: / Tệp chương trình / LLVM / bin / clang-cl.exe - bị hỏng Lỗi CMake tại C: / Tệp chương trình / CMake / share / cmake-3.15 / Mô-đun / CMakeTestCXXCompiler.cmake: 53 (tin nhắn): Trình biên dịch C ++ "C: / Tệp chương trình / LLVM / bin / clang-cl.exe" không thể biên dịch một chương trình thử nghiệm đơn giản. Nó không thành công với đầu ra sau: Thay đổi Dir: C: / Users / [NAME NAME] / source / repos / test_openmp / buid-clang-ninja / CMakeFiles / CMakeTmp Chạy Lệnh xây dựng: C: /Ninja/ninja.exe cmTC_50b73 && [1/2] Xây dựng đối tượng CXX CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj [2/2] Liên kết thực thi CXX cmTC_50b73.exe KHÔNG CÓ: cmTC_50b73.exe cmd.exe / C "cd. bảng kê khai - CMAKEEYER-NOTFOUND / nologo CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj /out:cmTC_50b73.exe /implib:cmTC_50b73.lib /pdb:cmTC_50b73 / rb hệ thống con: console kernel32.lib user32.lib gdi32.lib wonpool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd. " RC Pass 1: lệnh "rc / fo CMakeFiles \ cmTC_50b73.dir / manifest.res CMakeFiles \ cmTC_50b73.dir / manifest.rc" không thành công (mã thoát 0) với đầu ra sau: Hệ thống không thể tìm thấy các tập tin được chỉ định ninja: xây dựng dừng lại: tiểu ban thất bại. CMake sẽ không thể tạo chính xác dự án này. Call Stack (cuộc gọi gần đây nhất trước): CMakeLists.txt: 2 (dự án) - Cấu hình không đầy đủ, xảy ra lỗi! Xem thêm "C: / Users / [NAME NAME] /source/repose/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log". Xem thêm "C: / Users / [NAME NAME] /source/repose/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log".
Bất kỳ ý tưởng về cách tiến hành với tiếng kêu? Tôi nghĩ đó là lựa chọn tốt nhất của tôi cho những gì tôi muốn đạt được (biên dịch chương trình thử nghiệm của tôi với sự hỗ trợ cho OpenMP 4.5 hoặc mới hơn và sản xuất .lib
và .dll
).
Các bài đăng / trang web liên quan mà tôi đã kiểm tra nhưng không hữu ích để giải quyết vấn đề này:
- Xây dựng dự án c ++ trên Windows với CMake, Clang và Ninja
- Xây dựng với CMake, Ninja và Clang trên Windows
- Các cách để biên dịch với Clang trên Windows , đặc biệt là thiết lập trình liên kết:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- Xây dựng CMake cho Windows (clang-cl) bằng Ninja Generator
- Hướng dẫn sử dụng Clang-cl
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
. Tôi sẽ đào sâu vào lỗi mới này và nếu tôi không tìm thấy câu trả lời tôi sẽ đăng một câu hỏi mới. Cảm ơn bạn!