সি ++ বুস্ট: বুস্ট :: সিস্টেম :: জেনেরিক_ বিভাগে () এর অপরিবর্তিত রেফারেন্স


92

আমি Boostআমার প্রকল্পে গ্রন্থাগারগুলি অন্তর্ভুক্ত করার চেষ্টা করছি এবং একই সাথে সমস্যার মুখোমুখি হয়েছি। আমি কোডব্লকস আইডিই সহ উবুন্টু ১২.১০ তে আছি এবং সাইট থেকে নির্দেশাবলী পড়ার জন্য ম্যানুয়ালি লাইব্রেরিগুলি ইনস্টল করার চেষ্টা করেছি, তবে ব্যবহারের পূর্বে নির্মিত লাইব্রেরিগুলির সাথে শিরোনামের সাথে ত্রুটি ঘটছিল।

আমি তখন টার্মিনালবিয়ের মাধ্যমে লাইব্রেরিগুলি ইনস্টল করেছি sudo apt-get install libboost-all-dev। এর পরে, কোডব্লকগুলিতে আমার প্রোগ্রামগুলিতে আমি পছন্দ মতো শিরোনাম অন্তর্ভুক্ত করতে পারি #include <boost/regex.hpp>তবে যখন আমি ফাইল সিস্টেম লাইব্রেরি ( #include "boost/filesystem/operations.hpp" ) এর শিরোনাম অন্তর্ভুক্ত করার চেষ্টা করি তখন আমি নিম্নলিখিত ত্রুটিটি পেয়ে যাচ্ছি:

/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|

আমি কীভাবে এই ত্রুটিটি সমাধান করব তা নিশ্চিত নই (বিশেষত লিনাক্সের কোডব্লকগুলিতে)। আমি সত্যিই এখানে কিছু সাহায্য ব্যবহার করতে পারে।

কম্পাইলার: জিসিসি
প্রোগ্রাম কোড: শুধু উপরে ফাইল সিস্টেম inlcuding চেষ্টা operations.hppফাইল।

কোডব্লকস থেকে লগ তৈরি করুন:

Build started on: 20-11-2012 at 18:02.53
Build ended on: 20-11-2012 at 18:02.54
-------------- Build: Debug in libopenFrameworks ---------------
Target is up to date.
-------------- Build: Debug in reader1 ---------------
make -s -f Makefile Debug
linking i686 bin/reader1_debug linux
obj/i686Debug/src/testApp.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
obj/i686Debug/src/main.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [bin/reader1_debug] Error 1
Process terminated with status 2 (0 minutes, 1 seconds)
6 errors, 0 warnings

আপনার এটি সঠিকভাবে সংযুক্ত করছেন না,
কোডব্লকগুলি

@pyCthon: সেক্ষেত্রে আপনি কোড :: ব্লকগুলিতে কীভাবে এটি লিঙ্ক করবেন সে সম্পর্কে আপনি আরও বিশদ যুক্ত করতে পারেন। আমি -lboost_systemসেটিংসে কোনও স্থানে লিঙ্কার পতাকা যুক্ত করার চেষ্টা করেছি , তবে এটি সমাধান হয়নি। তবে আমি ঠিক স্থানে পুরো লিঙ্কার পতাকা জিনিসটি করেছি কিনা তা সম্পর্কে আমি নিশ্চিত নই। আরেকটু বিস্তারিত বিবরণ সাহায্য করবে।
সাইফার

ভাল আপনি কি সংকলক ব্যবহার করছেন? মিংগ? জিসিসি? আপনি কোন কোড চালানোর চেষ্টা করছেন? একটি উদাহরণ দিন .....
পাইকথন

@ পিসিথন: কমলার হ'ল জিসিসি। আমি এখন অবধি কোনও কোড লিখি নি, তবে Boost filesystem library(উপরের পোস্টে অপারেশন.চ.পি) সহ চেষ্টা করেছি
সাইফার

এটি কি জি ++ দিয়ে কমান্ড লাইন থেকে ফাইল সিস্টেম লাইব্রেরি বৃদ্ধির জন্য একটি নিয়মিত প্রোগ্রাম সংকলন করে কাজ করে?
পাইকথন

উত্তর:


141

আপনার libboost_systemলাইব্রেরিতে লিঙ্ক করা উচিত । আমি কোডব্লকগুলি সম্পর্কে নিশ্চিত নই, তবে আপনার প্ল্যাটফর্মে জি ++ কমান্ড-লাইন বিকল্পটি হবে

-lboost_s systemm


আমি ইতিমধ্যে লিঙ্কার পতাকাটি যুক্ত করার জন্য পেয়েছি। কোডব্লকগুলিতে এটি কাজ করে না।
সাইফার

@ সিফার আপনি কোডব্লকস দ্বারা নির্বাহিত বিল্ড এবং লিঙ্ক আদেশগুলি পেতে পারেন?
janchopanza

@ সিফার দুঃখিত, পেস্টবিন কর্মক্ষেত্রে অবরুদ্ধ। আমি পরে যাচাই করতে পারি তবে কয়েক ঘন্টা লাগবে।
janchopanza

সমস্যা নেই. পোস্টেও আপডেট হয়েছে
সাইফার

আমার সিফারের মতো একই সমস্যা আছে, কেবলমাত্র আমার ক্ষেত্রে আমি বুস্ট / অ্যাসিওএইচপি। সংকলনের চেষ্টা করার সময় আমি এই ত্রুটিটি s1.directupload.net/images/130608/koyvqpdp.jpg পেয়েছি । আমি যখন -lboost_system যুক্ত করার চেষ্টা করি তখন এটি "lboost_system খুঁজে পাবে না" বলে says সমস্যা কি?
ddacot

21

বুস্ট সংস্করণটির উপর নির্ভর করে libboost-system -mt প্রত্যয়টি আসে যা গ্রন্থাগারগুলিকে মাল্টিথ্রেডিং সক্ষমতা নির্দেশ করে।

সুতরাং যদি -lboost_systemলিঙ্কারটি খুঁজে না পাওয়া যায় তবে চেষ্টা করুন -lboost_system-mt


4
এটি কাজ করে কারণ এই বুস্ট সংস্করণগুলির জন্য প্রকৃত লাইব্রেরি ফাইলের নামের একটি -mtপ্রত্যয় ছিল ।
tssch

9

এটি একটি লিঙ্কারের সমস্যা। আপনার প্রকল্পে স্থির গ্রন্থাগার পাথ অন্তর্ভুক্ত করুন।

কিউটি ক্রিয়েটারের জন্য প্রজেক্ট ফাইলটি খুলুন .proএবং নিম্নলিখিত লাইনটি যুক্ত করুন:

LIBS += -L<path for boost libraries in the system> -lboost_system

আমার ক্ষেত্রে উবুন্টু x86_64:

LIBS += -L/usr/lib/x86_64-linux-gnu -lboost_system

কোডব্লকগুলির জন্য, Settings->Compiler...->Linkerসেটিংস ট্যাব খুলুন এবং যুক্ত করুন:

boost_system

লিঙ্ক লাইব্রেরি পাঠ্য উইজেট এবং OKবোতাম টিপুন।


7

আমি পাশাপাশি একটি সমাধান অনুসন্ধান করেছি এবং আমি যে উত্তরগুলির মুখোমুখি হয়েছি তার মধ্যে একটিও ত্রুটিটি সমাধান করে না, যতক্ষণ না আমি এই থ্রেডের "ViRuSTriNiTy" এর উত্তর খুঁজে না পেয়েছি: 'বুস্ট :: সিস্টেম :: জেনেরিক_ ক্যাটাগরী ()' এর অপরিবর্তিত রেফারেন্স?

এই উত্তর অনুসারে, আপনার cmake ফাইলে এই লাইনগুলি যুক্ত করার চেষ্টা করুন:

find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem)
include_directories(... ${Boost_INCLUDE_DIRS})
link_directories(... ${Boost_LIBRARY_DIRS})
target_link_libraries(... ${Boost_LIBRARIES})

5

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

add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)Cmake ফাইলের জন্য যুক্ত করা হচ্ছে ।

আমার সিএমকেলিস্ট.টেক্সট এর মত দেখাচ্ছে:

cmake_minimum_required(VERSION 3.12)
project(proj)

set(CMAKE_CXX_STANDARD 17)


set(SHARED_DIR "${CMAKE_SOURCE_DIR}/../shared")

set(BOOST_LATEST_DIR            "${SHARED_DIR}/boost_1_68_0")
set(BOOST_LATEST_BIN_DIR        "${BOOST_LATEST_DIR}/stage/lib")
set(BOOST_LATEST_INCLUDE_DIR    "${BOOST_LATEST_DIR}/boost")
set(BOOST_SYSTEM                "${BOOST_LATEST_BIN_DIR}/libboost_system.so")
set(BOOST_FS                    "${BOOST_LATEST_BIN_DIR}/libboost_filesystem.so")
set(BOOST_THREAD                "${BOOST_LATEST_BIN_DIR}/libboost_thread.so")

set(HYRISE_SQL_PARSER_DIR           "${SHARED_DIR}/hyrise_sql_parser")
set(HYRISE_SQL_PARSER_BIN_DIR       "${HYRISE_SQL_PARSER_DIR}")
set(HYRISE_SQL_PARSER_INCLUDE_DIR   "${HYRISE_SQL_PARSER_DIR}/src")
set(HYRISE_SQLPARSER                "${HYRISE_SQL_PARSER_BIN_DIR}/libsqlparser.so")


include_directories(${CMAKE_SOURCE_DIR} ${BOOST_LATEST_INCLUDE_DIR} ${HYRISE_SQL_PARSER_INCLUDE_DIR})

set(BOOST_LIBRARYDIR "/usr/lib/x86_64-linux-gnu/")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)

add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

find_package(Boost 1.68.0 REQUIRED COMPONENTS system thread filesystem)

add_executable(proj main.cpp row/row.cpp row/row.h table/table.cpp table/table.h page/page.cpp page/page.h
        processor/processor.cpp processor/processor.h engine_instance.cpp engine_instance.h utils.h
        meta_command.h terminal/terminal.cpp terminal/terminal.h)


if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    target_link_libraries(proj PUBLIC Boost::system Boost::filesystem Boost::thread ${HYRISE_SQLPARSER})
endif()

4

একটি সাধারণ বুস্ট উদাহরণ তৈরির ক্ষেত্রে একই সমস্যা, আমি -std = c ++ 14 থেকে -std = c ++ 11-তে g ++ সংকলক পতাকা পরিবর্তন করার পরে সমাধান করা হয়েছে ।

এবং আমি লক্ষ্য করেছি যে এটি একটি সি ++ 11 উদাহরণ ...


যে আমার সমস্যা সমাধান। সংকলনের সময় ব্যবহৃত পতাকাগুলি ভুলে যাওয়া বেশ সহজ, বিশেষত আপনি যখন ডিফল্ট ব্যবহার করেন।
ফিলিপ ক্যালসানস

3

আমারও একই সমস্যা ছিল এবং লিনাক্স মিন্টও ব্যবহার করে (নুডুওজ হিসাবে)। আমি যুক্ত boost_systemকরার পরে আমার কেসের সমস্যাটি সমাধান হয়ে গেছে GCC C++ Linker->Libraries


1

আপনি অন্য একটি সমস্যা জুড়ে আসতে পারেন। লিনাক্স মিন্টে বুস্ট ইনস্টল করার পরে আমারও একই সমস্যা হয়েছিল। লাইব্রেরির নাম থাকার কারণে লিঙ্ক করা -lboost_systemবা -lboost_system-mtকাজ করা হয়নি libboost_system.so.1.54.0

সুতরাং সমাধানটি হ'ল মূল ফাইলটিতে প্রতীকী লিঙ্ক তৈরি করা। আমার ক্ষেত্রে

sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/libboost_system.so

আরও তথ্যের জন্য এই প্রশ্নটি দেখুন।


1

Il গ্রন্থাগারটি ইনস্টল করা নেই আপনার বুস্ট লাইব্রেরি ফোল্ডার দেওয়া উচিত:

উদাহরণ:

g ++ -L / usr / lib / x86_64-linux-gnu -lboost_system -lboost_filesystem prog.cpp -o prog


0

চেষ্টা করুন

g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out 

/usr/lib/x86_64-linux-gnu/ বুস্ট লাইব্রেরির অবস্থান

find /usr/ -name '*boost*.so'বুস্ট লাইব্রেরির অবস্থানটি সন্ধান করতে ব্যবহার করুন


0

g ++ -lboost_system -lboost_files systemm userentry.cpp -o ইউজারেন্ট্রি

ডিবিয়ান অধীনে পুরোপুরি কাজ। (অ্যাপ-গেট সহ সি ++ লাইব্রেরিগুলি বুস্ট করুন) st


0

উপরে বর্ণিত প্রস্তাবিত সমাধানগুলি পরীক্ষার পরে, আমি দেখতে পেলাম যে এই কয়েকটি লাইনই কাজ করবে।

আমি উবুন্টু 16.04 ব্যবহার করছি।

cmake_minimum_required (সংস্করণ 3.13)
প্রকল্প (মাইপ্রজেক্ট)

সেট করুন (CMAKE_CXX_STANDARD 11)
add_executable (myProject main.cpp)

সন্ধান_প্যাকেজ (1.58.0 প্রয়োজনীয় কম্পিউটার সিস্টেমের সিস্টেম বুস্ট করুন)
টার্গেট_লিঙ্ক_লাইব্রিজ (আমারপ্রজেক্ট {oo বুস্ট_লিবারি})

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