চ্যাট বুস্টকে খুঁজে পায় না


89

আমি সিএমকেক ব্যবহার করে একটি প্রকল্প কনফিগার করার চেষ্টা করছি, তবে এটি নির্দিষ্ট ফোল্ডারে থাকা সত্ত্বেও বুস্ট লাইব্রেরিগুলি খুঁজে পেতে ব্যর্থ। আমি নির্দিষ্ট করে দিয়েছি Boost_INCLUDE_DIR, Boost_LIBRARYDIRএবং BOOST_ROOT, তবে আমি এখনও ত্রুটি পেয়েছি যে সিএমকে বুস্টকে খুঁজে পাচ্ছে না। এরকম ত্রুটির কারণ কী হতে পারে?


বুস্টের কয়েকটি সংস্করণ পতাকা ব্যবহার করে Boost_INCLUDE_DIRএবং অন্যরা পতাকাটি ব্যবহার করে Boost_INCLUDEDIR( আন্ডারস্কোর ছাড়াই )। আপনি পড়া দ্বারা আপনার ক্ষেত্রে জন্য সঠিক পরীক্ষা করতে পারবেন FindBoost.cmakeফাইল, অধীনpath-to-cmake/Modules/FindBoost.cmake
marcelosalloum

এফওয়াইআই, আপনি যদি সিএমকে সমর্থন জোরদার করে তুলছেন তবে আপনার ব্যবহার করা উচিতfind_package(Boost CONFIG)
দিমিত্রি

উত্তর:


106

আপনি কি নিশ্চিত যে আপনি এটি সঠিক উপায়ে করছেন? ধারণা যে CMake সেটে BOOST_INCLUDE_DIR, BOOST_LIBRARYDIRএবং BOOST_ROOTস্বয়ংক্রিয়ভাবে। এর মতো কিছু করুন CMakeLists.txt:

যদি বুস্ট কোনও ডিফল্ট স্থানে ইনস্টল না করা থাকে এবং সিএমকে এটি সন্ধান না করতে পারে তবে আপনি সিএমকে বলতে পারেন যে এইভাবে উন্নতির সন্ধান কোথায় করা উচিত:

অবশ্যই, যারা দুই লাইন হতে হবে সামনেFIND_PACKAGE(Boost)CMakeLists.txt


36
এটা ${Boost_INCLUDE_DIR}না ${BOOST_INCLUDE_DIR}, কেস গুরুত্বপূর্ণ।
ইহোর কাহারলিচেনকো

4
হয়ত এটি চতুর নতুন সংস্করণে পরিবর্তিত হয়েছে, তবে এখানে রেফারেন্স ডক্স রয়েছে: cmake.org/cmake/help/v3.0/module/FindBoost.html
নিক

4
এটি আমার পক্ষে কাজ করে না ... এটি বুস্ট গ্রন্থাগারটি সন্ধান করে তবে সংকলনের সময় প্রচুর ত্রুটি সৃষ্টি করে

4
এটা ' BOOST_INCLUDEDIR' হওয়া উচিত নয় ?
22:30

4
@ ইহোরকাহারলিচেনকো, তবে BOOST_ROOT হওয়া উচিত BOOST_ROOT। অসাধারণ! আমাকে আন্ডারস্কোর ছাড়াই আন্ডারস্কোরযুক্ত সমস্ত কেস, উটের কেস, সমস্ত ক্যাপগুলি দিয়ে চেষ্টা করার চেষ্টা করুন ... <পৃষ্ঠার খেজুর>
ডক ডজারস

54

FindBoost.cmakeফাইলটি নিজেই পড়ে আরও সহায়তা পাওয়া যায়। এটি আপনার 'মডিউল' ডিরেক্টরিতে অবস্থিত।

একটি ভাল শুরু হ'ল set(Boost_DEBUG 1)- এটি বুস্ট কোথায় খুঁজছে, কী সন্ধান করছে সে সম্পর্কে ভাল তথ্য সঞ্চার করবে এবং কেন এটি খুঁজে পাচ্ছে না তা ব্যাখ্যা করতে সহায়তা করতে পারে।

এটি আপনার BOOST_ROOTসঠিকভাবে উঠছে কিনা তা নির্ধারণ করতেও আপনাকে সহায়তা করতে পারে ।

FindBoost.cmakeএছাড়াও উপলব্ধ সংস্করণ ভেরিয়েবলগুলিতে বুস্টের সঠিক সংস্করণটি তালিকাভুক্ত না করা থাকলে কখনও কখনও সমস্যা হয়। আপনি পড়ার মাধ্যমে এই সম্পর্কে আরও জানতে পারেন FindBoost.cmake

সবশেষে, FindBoost.cmakeঅতীতে কিছু বাগ ছিল। একটা বিষয়ে তোমার চেষ্টা করতে পারে এর একটি নতুন সংস্করণ নিতে হয় FindBoost.cmakeCMake এর সর্বশেষ সংস্করণ থেকে বের করে, এবং এটি আপনার প্রকল্প ফোল্ডারের মধ্যে বিদ্ধ পাশাপাশি CMakeLists.txtতারপর এমনকি যদি আপনি বুস্ট এর একটি পুরোনো সংস্করণ আছে, এটা নতুন সংস্করণের ব্যবহার করে - FindBoost.cmakeযে হয় আপনার প্রকল্পের ফোল্ডার

শুভকামনা।


10

আমি নিজেই এই সমস্যাটির সাথে লড়াই করেছি। এটি cmakeবুস্টের নামকরণ কনভেনশন ব্যবহার করে বুস্ট লাইব্রেরি ফাইলগুলির সন্ধান করছে, যেখানে লাইব্রেরির নাম এটি তৈরির জন্য ব্যবহৃত সংকলক সংস্করণের একটি ফাংশন। আমাদের বুস্ট লাইব্রেরিগুলি ব্যবহার করে নির্মিত হয়েছিল GCC 4.9.1এবং সেই সংকলক সংস্করণটি আসলে আমাদের সিস্টেমে উপস্থিত ছিল; তবে, GCC 4.4.7ইনস্টল করা হয়েছে। যেমনটি ঘটে, ক্যামের FindBoost.cmakeস্ক্রিপ্টটি তার GCC 4.4.7পরিবর্তে ইনস্টলেশনটি স্বয়ংক্রিয়ভাবে সনাক্ত GCC 4.9.1করছিল এবং এইভাবে " gcc44" এর পরিবর্তে " gcc49" ফাইলের নামের সাথে " " বুস্ট লাইব্রেরি ফাইলগুলির সন্ধান করছিল ।

সহজ ফিক্সটি ছিল চেমাকে জোর করে ধরে নেওয়া যে জিসিসি 4.9 উপস্থিত ছিল, Boost_COMPILER" -gcc49" এ সেট করে CMakeLists.txt। এই পরিবর্তনের সাথে FindBoost.cmake, আমার বুস্ট লাইব্রেরি ফাইলগুলি সন্ধান করেছে এবং খুঁজে পেয়েছে।


7

আপনি বুস্টের সংস্করণটিও নির্দিষ্ট করতে পারেন যা আপনি সিএমকে ব্যবহার করতে চান যা সঠিক সংস্করণ বুস্ট শিরোনামগুলির অবস্থানটি পাস করে -DBOOST_INCLUDEDIRবা -DBOOST_ROOTনির্দেশ করে by

উদাহরণ:

cmake -DBOOST_ROOT=/opt/latestboost

একাধিক বুস্ট সংস্করণ একই সিস্টেমে থাকাকালীন এটিও কার্যকর হবে।


ধন্যবাদ, যা উইন্ডোজের জন্য অভ্র বিল্ডের সাথে আমার পক্ষে কাজ করেছিল।
ggurov

আমার জন্য কাজ করেছেন, এটিকে পরিবেশ হিসাবে সিএমকে জিইউআই সরঞ্জামে স্থাপন করুন ... তারপরে এন্ট্রি যুক্ত করুন, তারপরে BOOST_ROOT, মান সি: \ প্রোগ্রাম ফাইলগুলি \ পিসিএল 1.11.1 \ তৃতীয় পক্ষ \ বুস্ট (আমার পিসিএল ইনস্টল করা আছে)
রিচার্ড কেইন

5

আমারও একইরকম সমস্যা ছিল এবং আবিষ্কার করেছি যে BOOST_INCLUDE_DIR, BOOST_LIBRARYDIR এবং BOOST_ROOT env ভেরিয়েবলগুলিকে অবশ্যই নিখুঁত পথ ধরে রাখা উচিত । এইচটিএইচ!


হ্যাঁ. BOOST_ROOT env এ আপেক্ষিক পথের কারণে একই সমস্যা ছিল। আপনাকে অনেক ধন্যবাদ!
korst1k

2

makeউবুন্টু ট্রাস্টি 64 এ বুস্ট সংস্করণ 1.66.0 ইনস্টল করার পরে একটি প্রকল্পের জন্য চালানোর চেষ্টা করার সময় আমার একই সমস্যা হয়েছিল। ত্রুটি বার্তাটি এইটির মতো (ঠিক তেমন নয়):

বুস্ট অবশ্যই ইনস্টল করা হয়েছিল, কিন্তু সিএমকে এটি সনাক্ত করতে পারেনি। পথ এবং পরিবেশগত ভেরিয়েবলের সাথে প্রচুর সময় কাটানোর পরে অবশেষে আমি cmakeনিজেই বিকল্পগুলির জন্য অনুসন্ধান করে শেষ হয়েছি :

সুতরাং আমি ইস্যুতে ডিরেক্টরিটিতে নিম্নলিখিতটি চালিয়েছি:

sudo cmake --check-system-vars

যা ফিরে এসেছে:

এবং সমস্যাটি সমাধান করেছেন।


2

Cmake সংস্করণ 3.1.0-rc2জন্য boost 1.57নির্দিষ্ট বাছাই-D_boost_TEST_VERSIONS=1.57

cmake version 3.1.0-rc2ডিফল্ট boost<=1.56.0হিসাবে ব্যবহার দেখা যায়-DBoost_DEBUG=ON

cmake -D_boost_TEST_VERSIONS=1.57 -DBoost_DEBUG=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++


2

আপনি যদি নিজের উত্সাহ তৈরি করছেন তবে --layout=versionedঅন্যথায় ব্যবহার করতে ভুলবেন না অন্যথায় গ্রন্থাগারের একটি নির্দিষ্ট সংস্করণ অনুসন্ধান ব্যর্থ হবে


1

স্ট্যাটিকালি লিঙ্কযুক্ত বুস্ট সহ বিশেষ করে সিজিএল গড়ার চেষ্টা করা যে কারও জন্য আরও একটি পরামর্শ । এটি সংজ্ঞায়িত করার পক্ষে যথেষ্ট নয় Boost_USE_STATIC_LIBS; এটির সময়ের ফলে Boost_DEBUGএটির ওভাররাইড হয়ে যায় । এখানে কাজটি হ'ল "উন্নত" চেকবক্সটি পরীক্ষা করা এবং সক্ষম করা CGAL_Boost_USE_STATIC_LIBS


1

আমার জন্য এই ত্রুটিটি কেবল উবুন্টুতে বুস্ট ইনস্টল করা হয়নি বলে ছিল:

sudo apt install build-essential libboost-system-dev libboost-thread-dev libboost-program-options-dev libboost-test-dev


0

আমারও একই সমস্যা ছিল এবং উপরের সমাধানগুলির কোনওটিরই কাজ হয়নি। আসলে, ফাইলটি include/boost/version.hppপড়তে পারা যায় নি (জেনকিন্স দ্বারা প্রবর্তিত cmake স্ক্রিপ্ট দ্বারা)।

আমাকে নিজেই করতে হয়েছিল (বুস্ট) লাইব্রেরির অনুমতি পরিবর্তন করতে হয়েছিল (যদিও জেনকিন্স গ্রুপের অন্তর্ভুক্ত, তবে এটি জেনকিন্সের সাথে যুক্ত অন্য একটি সমস্যা যা আমি বুঝতে পারি না):


0

CMAKE_FIND_ROOT_PATHপৃথক হিসাবে সেট করা থাকলে এটিও ঘটতে পারে BOOST_ROOT। আমি একই সমস্যার মুখোমুখি হয়েছি যে সেটিং সত্ত্বেও BOOST_ROOT, আমি ত্রুটি পেয়েছিলাম। তবে এআরএমের জন্য ক্রস সংকলনের জন্য আমি টুলচেইন-অ্যান্ড্রয়েড.কম ব্যবহার করছিলাম যা আমার ছিল (কোনও কারণে):

CMAKE_FIND_ROOT_PATHমনে হচ্ছে ওভাররাইড হচ্ছে BOOST_ROOTযা সমস্যার কারণ হয়ে দাঁড়িয়েছিল।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.