Paralelleştirme için OpenMP kullanan küçük bir test projem var. Amacım bunu üretecek şekilde .dll
ve .lib
kütüphaneler için derlemektir (çünkü gerçek projem bu türler kullanılarak dağıtılan harici kütüphanelere bağlanır), OpenMP 4.5 veya daha yeni bir desteğiyle bunu yapmak ve komut satırından bunu yapmak için bir docker'da yapılabilir. test etme ve kontrol etme (docker kısmı bu sorunun kapsamı dışındadır, sadece komut satırından neden çalışmam gerektiğine dair referans içindir). Bu projeyi mutlu olmadığım farklı derleyicilerle derleyebilirim:
- MSVC:,
mkdir build-msvc
sonracmake ..
(yeni oluşturulan klasörden) ve son olarakcmake --build . --config Release
. Bu iyi derlenir, ancak yalnızca OpenMP 2.0'ı destekler, bu nedenle gerçek projem için iyi bir seçenek değildir. - Intel Parallel Studio:,
mkdir build-intel
sonracmake .. -T "Intel C++ Compiler 19.0"
(yeni oluşturulan klasörden) ve son olarakcmake --build . --config Release
. Bu OpenMP 5.0'ı destekliyor ancak lisansları benim için oldukça pahalı. - MinGW x64 g ++:,
mkdir build-g++
sonracmake .. -G "MinGW Makefiles"
(yeni oluşturulan klasörden) ve son olarakcmake --build .
. OpenMP 4.5'i destekliyor, ancak bu derleyici.lib
benim için gerekli olduğunu belirttiğim (bildiğim kadarıyla) ile uyumlu değil .
Clang kullanmak için başarılı olmadan denedim:
- MSVC'den CLANG:,
mkdir build-clang-msvc
sonracmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(yeni oluşturulan klasörden), ancak aşağıdaki hatayla başarısız olur:
- CXX derleyici kimliği, MSVC benzeri komut satırı ile Clang 8.0.1'dir - CXX derleyicisinin çalışıp çalışmadığını kontrol edin: C: / Program Dosyaları (x86) / Microsoft Visual Studio / 2019 / Topluluk / VC / Araçlar / Llvm / bin / clang-cl.exe - CXX derleyicisinin çalışıp çalışmadığını kontrol edin: C: / Program Dosyaları (x86) / Microsoft Visual Studio / 2019 / Topluluk / VC / Araçlar / Llvm / bin / clang-cl.exe - bozuk C: / Program Dosyaları / CMake / share / cmake-3.15 / Modüller / CMakeTestCXXCompiler.cmake: 53 (mesaj): C ++ derleyicisi "C: / Program Dosyaları (x86) / Microsoft Visual Studio / 2019 / Topluluk / VC / Araçlar / Llvm / bin / clang-cl.exe" basit bir test programını derleyemez. Aşağıdaki çıktı ile başarısız olur: Değişiklik Yönü: C: / Kullanıcılar / [KULLANICI ADI] / kaynak / repos / test_openmp / build-clang-msvc / CMakeFiles / CMakeTmp Derleme Komutlarını Çalıştır: C: /PROGRA~2/MICROS~1/2019/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe cmTC_bd131 && [1/2] CXX nesnesi oluşturma CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj [2/2] CXX yürütülebilir cmTC_bd131.exe dosyasını bağlama BAŞARISIZ: cmTC_bd131.exe cmd.exe / C "cd. &&" C: \ Program Dosyaları \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_bd131.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - manifests - C: \ PROGRA ~ 1 \ MINGW- ~ 1 \ X86_64 ~ 1.0-P \ mingw64 \ bin \ ld.exe / nologo CMakeFiles \ cmTC_bd131.dir \ testCXXCompiler.cxx.obj /out:cmTC_bd131.exe / implib: cmTC_bd131.lib /pdb:cmTC_bd131.pdb /version:0.0 / makine: X86 / hata ayıklama / INCREMENTAL / alt sistem: konsol kernel32.lib user32.lib gdi32.lib winspool.lib kabuk32.lib ole32.lib oleaut32.lib uuid.lib comdlg32 .lib advapi32.lib && cd. " RC Pass 1: "rc / fo CMakeFiles \ cmTC_bd131.dir / manifest.res CMakeFiles \ cmTC_bd131.dir / manifest.rc" komutu aşağıdaki çıktı ile başarısız oldu (çıkış kodu 0): Sistem belirtilen dosyayı bulamıyor ninja: derleme durduruldu: alt komut başarısız. CMake bu projeyi doğru bir şekilde oluşturamayacaktır. Çağrı Yığını (en son yapılan ilk çağrı): CMakeLists.txt: 2 (proje) - Yapılandırma tamamlanmadı, hatalar oluştu! Ayrıca bkz. "C: / Kullanıcılar / [KULLANICI ADI] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeOutput.log". Ayrıca bkz. "C: / Kullanıcılar / [KULLANICI ADI] /source/repos/test_openmp/build-clang-msvc/CMakeFiles/CMakeError.log".
- Clang ve Ninja, MSVC dışında:,
mkdir build-clang-ninja
sonracmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(yeni oluşturulan klasörden vePATH
çevre değişkenini değiştirmek için önce msvc olmayan bulunur), ancak aşağıdaki hatayla başarısız olur:
- CXX derleyici kimliği, MSVC benzeri komut satırı ile Clang 9.0.0'dır - CXX derleyicisinin çalışıp çalışmadığını kontrol edin: C: / Program Dosyaları / LLVM / bin / clang-cl.exe - CXX derleyicisinin çalışıp çalışmadığını kontrol edin: C: / Program Dosyaları / LLVM / bin / clang-cl.exe - bozuk C: / Program Dosyaları / CMake / share / cmake-3.15 / Modüller / CMakeTestCXXCompiler.cmake: 53 (mesaj): C ++ derleyicisi "C: / Program Dosyaları / LLVM / bin / clang-cl.exe" basit bir test programını derleyemez. Aşağıdaki çıktı ile başarısız olur: Değişiklik Yönü: C: / Kullanıcılar / [KULLANICI ADI] / kaynak / repos / test_openmp / buid-clang-ninja / CMakeFiles / CMakeTmp Derleme Komutlarını Çalıştır: C: /Ninja/ninja.exe cmTC_50b73 && [1/2] Cake nesnesi CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj oluşturma [2/2] CXX yürütülebilir cmTC_50b73.exe dosyasını bağlama BAŞARISIZ: cmTC_50b73.exe cmd.exe / C "cd. &&" C: \ Program Dosyaları \ CMake \ bin \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_50b73.dir --rc = rc --mt = CMAKE_MT-NOTFOUND - manifests - CMAKE_LINKER-NOTFOUND / nologo CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj /out:cmTC_50b73.exe /implib:cmTC_50b73.lib /pdb:cmTC_50b73.pdb /version:0.0 / makine: x64 / debug / INCREMENT alt sistem: konsol kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && cd. " RC Pass 1: "rc / fo CMakeFiles \ cmTC_50b73.dir / manifest.res CMakeFiles \ cmTC_50b73.dir / manifest.rc" komutu aşağıdaki çıktı ile başarısız oldu (çıkış kodu 0): Sistem belirtilen dosyayı bulamıyor ninja: derleme durduruldu: alt komut başarısız. CMake bu projeyi doğru bir şekilde oluşturamayacaktır. Çağrı Yığını (en son yapılan ilk çağrı): CMakeLists.txt: 2 (proje) - Yapılandırma tamamlanmadı, hatalar oluştu! Ayrıca bkz. "C: / Kullanıcılar / [KULLANICI ADI] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeOutput.log". Ayrıca bkz. "C: / Kullanıcılar / [KULLANICI ADI] /source/repos/test_openmp/buid-clang-ninja/CMakeFiles/CMakeError.log".
Clang ile nasıl devam edileceğine dair bir fikrin var mı? Ben başarmak istediğim şey için en iyi seçenek olduğunu düşünüyorum (test programımı OpenMP 4.5 veya daha yeni ve üreten .lib
ve destek ile derlemek .dll
).
İlgili yayınları / web sayfalarını kontrol ettim ancak bunu çözmek için yararlı olmadı:
- CMake, Clang ve Ninja ile Windows üzerinde c ++ projesi oluşturma
- Windows'ta CMake, Ninja ve Clang ile bina
- Windows'ta Clang ile Derleme Yolları , özellikle bağlayıcıyı ayarlama:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- C Ninja Generator kullanarak Windows (clang-cl) için bina yapın
- Clang-cl kullanım kılavuzu
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
. Bu yeni hatayı inceleyeceğim ve bir cevap bulamazsam yeni bir soru gönderirim. Teşekkür ederim!