Saya mencoba untuk memasukkan Boost
perpustakaan dalam proyek saya dan telah menghadapi masalah yang sama. Saya menggunakan Ubuntu 12.10 dengan Codeblocks IDE dan mencoba menginstal perpustakaan secara manual membaca instruksi dari situs, tetapi mendapatkan kesalahan dengan tajuk serta perpustakaan yang akan dibangun sebelum digunakan.
Saya kemudian menginstal perpustakaan melalui terminalby sudo apt-get install libboost-all-dev
. Setelah ini, dalam program saya di Codeblocks, saya dapat menyertakan header seperti #include <boost/regex.hpp>
tetapi ketika saya mencoba memasukkan header untuk perpustakaan Filesystem ( #include "boost/filesystem/operations.hpp"
), saya mendapatkan kesalahan berikut:
/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|
Saya tidak yakin bagaimana cara mengatasi kesalahan ini (khususnya di Codeblocks di Linux). Saya benar-benar membutuhkan bantuan di sini.
Kompiler: Gcc
Kode program: Hanya dicoba, termasuk file sistem operations.hpp
file di atas.
Buat log dari Codeblocks:
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
sumber
-lboost_system
di beberapa tempat di pengaturan, tetapi tidak berhasil. Namun, saya bahkan tidak yakin apakah saya melakukan seluruh hal bendera penaut di tempat yang tepat. Sedikit lebih banyak detail akan sangat membantu.Boost filesystem library
(operation.hpp di posting di atas)Jawaban:
Anda harus menautkan di
libboost_system
perpustakaan. Saya tidak yakin tentang blok kode, tetapi opsi baris perintah g ++ pada platform Anda adalahsumber
Bergantung pada versi boost, libboost-system dilengkapi dengan akhiran -mt yang seharusnya menunjukkan kemampuan multithreading perpustakaan.
Jadi jika
-lboost_system
tidak dapat ditemukan oleh linker coba-lboost_system-mt
.sumber
-mt
akhiran.Ini masalah penaut. Sertakan jalur perpustakaan statis ke dalam proyek Anda.
Untuk Qt Creator buka file proyek
.pro
dan tambahkan baris berikut:LIBS += -L<path for boost libraries in the system> -lboost_system
Dalam kasus saya Ubuntu x86_64:
Untuk Codeblocks, buka
Settings->Compiler...->Linker
tab pengaturan dan tambahkan:ke widget teks Link libraries dan tekan OKtombol.
sumber
Saya mencari solusi juga, dan tidak ada jawaban yang saya temui memecahkan kesalahan tersebut, Sampai saya menemukan jawaban "ViRuSTriNiTy" untuk utas ini: Referensi tidak ditentukan ke 'boost :: system :: generic_category ()'?
menurut jawaban itu, coba tambahkan baris ini ke file cmake Anda:
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})
sumber
Jawaban ini sebenarnya membantu saat menggunakan Boost dan cmake.
Menambahkan
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
untuk file cmake.CMakeLists.txt saya terlihat seperti ini:
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()
sumber
Masalah yang sama saat membuat contoh boost sederhana, diselesaikan setelah saya mengubah flag compiler g ++ dari -std = c ++ 14 menjadi -std = c ++ 11 .
Dan saya perhatikan bahwa itu adalah Contoh C ++ 11 ...
sumber
Saya memiliki masalah yang sama dan juga menggunakan Linux Mint (sebagai nuduoz). Saya masalah kasus saya terpecahkan setelah saya menambahkan
boost_system
keGCC C++ Linker->Libraries
.sumber
Anda bisa menemukan masalah lain. Setelah menginstal Boost di Linux Mint, saya mengalami masalah yang sama. Menautkan
-lboost_system
atau-lboost_system-mt
tidak berfungsi karena perpustakaan memiliki namalibboost_system.so.1.54.0
.Jadi solusinya adalah membuat tautan simbolis ke file asli. Dalam kasus saya
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/libboost_system.so
Untuk informasi lebih lanjut, lihat pertanyaan ini .
sumber
Jika perpustakaan tidak diinstal, Anda harus memberikan folder perpustakaan dorongan:
contoh:
sumber
mencoba
g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out
/usr/lib/x86_64-linux-gnu/
adalah lokasi pustaka boostgunakan
find /usr/ -name '*boost*.so'
untuk menemukan lokasi perpustakaan pendorongsumber
bekerja dengan sempurna di bawah debian. (tingkatkan pustaka c ++ yang diinstal dengan apt-get).
sumber
Setelah menguji solusi yang diusulkan yang dijelaskan di atas, saya menemukan hanya beberapa baris ini yang akan berfungsi.
Saya menggunakan Ubuntu 16.04.
cmake_minimum_required (VERSION 3.13)
proyek (myProject)
set (CMAKE_CXX_STANDARD 11)
add_executable (myProject main.cpp)
find_package (Meningkatkan 1.58.0 KOMPONEN YANG DIPERLUKAN sistem file sistem)
target_link_libraries (myProject $ {Boost_LIBRARY})
sumber