আমার একটি ছোট পরীক্ষা প্রকল্প রয়েছে যা সমান্তরালতার জন্য ওপেনএমপি ব্যবহার করে। আমার লক্ষ্য এটি সংকলন করে যাতে এটি উত্পাদন করে .dll
এবং .lib
গ্রন্থাগারগুলির জন্য (কারণ আমার প্রকৃত প্রকল্পটি এই ধরণের ব্যবহার করে বিতরণ করা বাহ্যিক গ্রন্থাগারের সাথে লিঙ্ক করে), ওপেনএমপি 4.5 বা আরও নতুনটির জন্য সমর্থন করে এবং কমান্ড লাইন থেকে এটি করে যাতে এটি ডকরে করা যায় পরীক্ষা করা এবং পরীক্ষা করা (ডকার অংশটি এই প্রশ্নের ক্ষেত্রের বাইরে, এটি কমান্ড লাইন থেকে কেন কাজ করা দরকার তা কেবল উল্লেখের জন্য)। আমি এই প্রকল্পটি বিভিন্ন সংকলক দিয়ে সংকলন করতে পারি যার সাথে আমি খুশি নই:
- এমএসভিসি:,
mkdir build-msvc
তারপরেcmake ..
(নতুন তৈরি ফোল্ডার থেকে) এবং শেষ পর্যন্তcmake --build . --config Release
। এটি সূক্ষ্ম সংকলন করে তবে কেবল ওপেনএমপি ২.০ সমর্থন করে, সুতরাং আমার বাস্তব প্রকল্পের জন্য এটি ভাল বিকল্প নয়। - ইন্টেল সমান্তরাল স্টুডিও:,
mkdir build-intel
তারপরেcmake .. -T "Intel C++ Compiler 19.0"
(সদ্য নির্মিত ফোল্ডার থেকে) এবং শেষ পর্যন্তcmake --build . --config Release
। এটি ওপেনএমপি 5.0 সমর্থন করে তবে এর লাইসেন্সগুলি আমার জন্য বেশ ব্যয়বহুল। - MinGW x64 g ++:,
mkdir build-g++
তারপরেcmake .. -G "MinGW Makefiles"
(সদ্য নির্মিত ফোল্ডার থেকে) এবং শেষ পর্যন্তcmake --build .
। এটি ওপেনএমপি ৪.৪ সমর্থন করে তবে এই সংকলক.lib
আমার সাথে প্রয়োজনীয় যা আমি ইতিমধ্যে উল্লেখ করেছি (যতদূর আমি জানি) সাথে সামঞ্জস্যপূর্ণ নয় ।
ঝাঁকুনি ব্যবহার করতে আমি সাফল্য ছাড়াই চেষ্টা করেছি:
- এমএসভিসি থেকে ক্ল্যাং করুন:,
mkdir build-clang-msvc
তারপরেcmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(নতুন তৈরি ফোল্ডার থেকে), তবে এটি নিম্নলিখিত ত্রুটির সাথে ব্যর্থ হয়েছে:
- সিএসএক্সএক্স সংকলক সনাক্তকরণ এমএসভিসি -র মতো কমান্ড-লাইনের সাথে 8.0.1 কলম্ব - সিএক্সএক্স সংকলকের কাজ করার জন্য পরীক্ষা করুন: সি: / প্রোগ্রাম ফাইলগুলি (x86) / মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও / 2019 / সম্প্রদায় / উপাচার্য / সরঞ্জাম / এলএলভিএম / বিন / ঝনঝন-ক্লা.এক্সে - সিএক্সএক্স সংকলক কাজ করার জন্য পরীক্ষা করুন: সি: / প্রোগ্রাম ফাইল (x86) / মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও / 2019 / সম্প্রদায় / উপাচার্য / সরঞ্জাম / এলএলভিএম / বিন / ঝনঝন- cl.exe - ভাঙা সিএমকে ত্রুটি সি: / প্রোগ্রাম ফাইল / সিএমকে / শেয়ার / cmake-3.15 / মডিউল / সিএমেকটেষ্টসিএক্সএক্সএক্সকম্পিলার.কম: 53 (বার্তা): সি ++ সংকলক "সি: / প্রোগ্রাম ফাইলগুলি (x86) / মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও / 2019 / সম্প্রদায় / উপাচার্য / সরঞ্জাম / এলএলভিএম / বিন / ঝনঝন- cl.exe" একটি সাধারণ পরীক্ষা প্রোগ্রাম সংকলন করতে সক্ষম নয়। এটি নিম্নলিখিত আউটপুট সঙ্গে ব্যর্থ: দির পরিবর্তন করুন: সি: / ব্যবহারকারী / [ব্যবহারকারী নাম] / উত্স / রেপো / টেস্ট_পেনম্প / বিল্ড-ক্ল্যাং-এমএসভিসি / সিএমেকফিলস / সিএমকেটম্প রান বিল্ড কমান্ড (গুলি): সি: / প্রোগ্রাজি 2/MICROS~1/2019/COMMUN~1/Common7/IDE/COMMON~1/MICROS~1/CMake/inja/ninja.exe cmTC_bd131 && [1/2] বিল্ডিং সিএক্সএক্স অবজেক্ট সিএমকেফিলস \ সেমিটিসিটি_বিডি 131.dir \ টেস্ট সিএক্সএক্সএক্সকম্পিলার [2/2] সিএক্সএক্স এক্সিকিউটেবল সিএমটিসি_বিডি 131.exe লিঙ্ক করা FAILED: cmTC_bd131.exe cmd.exe / C "cd। &&" C: \ প্রোগ্রাম ফাইলগুলি \ সিএমকে \ বিন \ cmake.exe "-E বনাম_লিংক_এক্সে --intdir = সিএমকেফাইলস \ সেমিটিসি_বিডি 131.dir --rc = আরসি - এমটি = সিএমএকে_এমটি-নোটফাউন্ড - উদ্ভাসিত - সি: C প্রোগ্রা ~ 1 \ মিংডব্লিউ- ~ 1 \ এক্স 86_64 ~ 1.0-পি \ মিংডু \ 64 \ বিন \ এলডি.এক্স / নোলোগো সিএমকেফিলস \ সেমিটিসি_বিডি 131.dir \ টেস্টসিএক্সএক্সএক্সকম্পিলার.কম / বি.এল / সিটি_বিডি 13 ই x cmTC_bd131.lib /pdb:cmTC_bd131.pdb /version:0.0 / মেশিন: এক্স 86 / ডিবাগ / ইনক্রিমেন্টাল / সাবসিস্টেম: কনসোল কার্নেল 32.lib ব্যবহারকারী 32.lib gdi32.lib ওনসপুল.লিব শেল 32.লিব ওলিড 32.লিব ওলিড 32.লিব .lib advapi32.lib && cd। " আরসি পাস 1: কমান্ড "আরসি / ফোনে সিএমেকফিলস \ সেমিটিসি_বিডি 131.dir / manifest.res সিএমকেফিলস \ সেমিটিসি_বিডি 131.dir / manifest.rc" ব্যর্থ হয়েছে (প্রস্থান কোড 0) নিম্নলিখিত আউটপুট সহ: সিস্টেম নির্দিষ্ট ফাইল খুঁজে পাচ্ছি না নিনজা: বিল্ড বন্ধ হয়ে গেছে: সাবকম্যান্ড ব্যর্থ হয়েছে। সিএমকে এই প্রকল্পটি সঠিকভাবে তৈরি করতে সক্ষম হবে না। কল স্ট্যাক (প্রথম সাম্প্রতিক কল): সিএমকেলিস্ট.টেক্সট: ২ (প্রকল্প) - অসম্পূর্ণ কনফিগারেশন, ত্রুটি ঘটেছে! "সি: / ব্যবহারকারী / [ব্যবহারকারী নাম] / / উত্স / রিপোস / টেস্ট_পেনম্প / বিল্ড-ক্লাং- এসএমসি / সি মেক ফাইলস / সি মেকআউটপুট.লগ" দেখুন। "সি: / ব্যবহারকারী / [ব্যবহারকারী নাম]] / সোর্স / রিপোস / টেস্ট_পেনম্প / বিল্ড-ক্লাং- এসএমসি / সি মেক ফাইলস / সি মেকেরার.লগ" দেখুন।
- এমএসভিসি বাদে ঝনঝন এবং নিনজা:,
mkdir build-clang-ninja
তারপরেcmake -G Ninja -DCMAKE_CXX_COMPILER=clang-cl ..
(সদ্য নির্মিত ফোল্ডার থেকে এবংPATH
পরিবেশগত পরিবর্তনশীল যাতে নন-এমএসভিসি প্রথম পাওয়া যায়) থেকে পরিবর্তন করা যায় তবে এটি নিম্নলিখিত ত্রুটির সাথে ব্যর্থ হয়:
- সিএসএক্সএক্স সংকলক সনাক্তকরণ এমএসভিসি -র মতো কমান্ড-লাইনের সাথে 9.0.0 ঝাঁকুনি রয়েছে - CXX সংকলক কাজ করার জন্য পরীক্ষা করুন: সি: / প্রোগ্রাম ফাইল / এলএলভিএম / বিন / ঝনঝন- cl.exe - CXX সংকলক কাজ করার জন্য পরীক্ষা করুন: সি: / প্রোগ্রাম ফাইল / এলএলভিএম / বিন / ঝনঝন- cl.exe - ভাঙা সিএমকে ত্রুটি সি: / প্রোগ্রাম ফাইল / সিএমকে / শেয়ার / cmake-3.15 / মডিউল / সিএমেকটেষ্টসিএক্সএক্সএক্সকম্পিলার.কম: 53 (বার্তা): সি ++ সংকলক "সি: / প্রোগ্রাম ফাইল / এলএলভিএম / বিন / ঝনঝন- cl.exe" একটি সাধারণ পরীক্ষা প্রোগ্রাম সংকলন করতে সক্ষম নয়। এটি নিম্নলিখিত আউটপুট সঙ্গে ব্যর্থ: দির পরিবর্তন করুন: সি: / ব্যবহারকারী / [ব্যবহারকারী নাম] / উত্স / রেপো / টেস্ট_পেনম্প / বিড-ক্ল্যাঞ্জ-নিনজা / সিএমেকফিলস / সিএমকেটম্প রান বিল্ড কমান্ড (গুলি): সি: / নিনজা / নিনজা.এক্সসিএমটিসি_50b73 && [1/2] বিল্ডিং সিএক্সএক্স অবজেক্ট সিএমকেফিলস \ সেএমটিসি_50 বি 73.dir \ টেস্টসিএক্সএক্সএক্সকমিলার সিএক্সএক্স.জ.জেজ [2/2] সিএক্সএক্স এক্সিকিউটেবল সিএমটিসি_50b73.exe লিঙ্ক করা FAILED: cmTC_50b73.exe cmd.exe / C "cd। &&" C: \ প্রোগ্রাম ফাইলগুলি \ সিএমকে \ বিন \ cmake.exe "-E vs_link_exe --intdir = CMakeFiles \ cmTC_50b73.dir --rc = আরসি - এমটি = CMAKE_MT- নোটফাউন্ড - উদ্ভাসিত - CMAKE_LINKER-NOTFOUND / nologo CMakeFiles \ cmTC_50b73.dir \ testCXXCompiler.cxx.obj /out:cmTC_50b73.exe /implib:cmTC_50b73.lib /pdb:CMC_50b73.pdb /version.0.0 / মেশিন: এক্সআরএনএস / মেশিন: সাবসিস্টেম: কনসোল কার্নেল 32.lib ব্যবহারকারী 32.lib gdi32.lib winspool.lib শেল 32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib অ্যাডাপি 32.lib &&d সিডি। " আরসি পাস 1: কমান্ড "আরসি / ফো সিএমেকফিলস \ সেমিটিসি_50b73.dir / manifest.res সিএমকেফিলস \ সেমিটিসি_50b73.dir / manifest.rc" ব্যর্থ হয়েছে (প্রস্থান কোড 0) নিম্নলিখিত আউটপুট সহ: সিস্টেম নির্দিষ্ট ফাইল খুঁজে পাচ্ছি না নিনজা: বিল্ড বন্ধ হয়ে গেছে: সাবকম্যান্ড ব্যর্থ হয়েছে। সিএমকে এই প্রকল্পটি সঠিকভাবে তৈরি করতে সক্ষম হবে না। কল স্ট্যাক (প্রথম সাম্প্রতিক কল): সিএমকেলিস্ট.টেক্সট: ২ (প্রকল্প) - অসম্পূর্ণ কনফিগারেশন, ত্রুটি ঘটেছে! "সি: / ব্যবহারকারী / [ব্যবহারকারী নাম]] / সোর্স / রিপোস / টেস্ট_পেনম্প / বিড -ক্ল্যাং- এনঞ্জা / সি মেক ফাইলস / সি মেকআউটপুট.লগ" দেখুন। "সি: / ব্যবহারকারী / [ব্যবহারকারী নাম]] / উত্স / রিপোস / টেস্ট_পেনম্প / বিড- ক্লেং- এনঞ্জা / সি মেকফিলস / সি মেকেরার.লগ" দেখুন।
ঝাঁকুনি দিয়ে কীভাবে এগিয়ে যাওয়া যায় সে সম্পর্কে কোনও ধারণা? আমার মনে হয় এটা আমি কি অর্জন (ফলে, OpenMP -র 4.5 অথবা ঊর্ধ্বতন সংস্করণ জন্য সমর্থন এবং প্রযোজনার সঙ্গে আমার পরীক্ষা প্রোগ্রাম কম্পাইল করতে চান তাদের জন্য আমার সেরা বিকল্প .lib
এবং .dll
)।
সম্পর্কিত পোস্ট / ওয়েবপৃষ্ঠাগুলি যা আমি পরীক্ষা করে দেখেছি তবে এটি সমাধানে অকার্যকর ছিল:
- সিএমকে, কলং এবং নিনজা দিয়ে উইন্ডোজে সি ++ প্রকল্প তৈরি করা হচ্ছে
- উইন্ডোজে সিএমকে, নিনজা এবং কলঙ্কের সাথে বিল্ডিং
- উইন্ডোজে কলঙ্কের সাথে সংকলনের উপায়গুলি , বিশেষত লিঙ্কারটি সেট করে:
-DCMAKE_LINKER="C:/Program Files/LLVM/bin/lld-link.exe"
- নিনজা জেনারেটরটি ব্যবহার করে উইন্ডোজ (ঝনঝন-ক্লাং) এর জন্য সিএমকে বিল্ডিং
- ঝনঝন- cl ব্যবহারকারী ম্যানুয়াল
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
। আমি এই নতুন ত্রুটিটি খনন করব এবং উত্তর না পেলে আমি একটি নতুন প্রশ্ন পোস্ট করব। ধন্যবাদ!