Boost не связывается в режиме выпуска cmake ⇐ C++
-
Anonymous
Boost не связывается в режиме выпуска cmake
I have an issue related to my C++ project, where i use boost lib. The problem arises when I try to build the project in release mode using cmake: the boost library is not identified(multiple undefined reference errors), even though I checked in cmake that everything works well(Boost_FOUND). The issue only occurs for release, when I use debug flag, my project building works fine. here is the cmake list:
cmake_minimum_required(VERSION 3.2) set(CMAKE_STANDARD 14) set(CMAKE_CXX_COMPILER g++) project(diskann) include_directories(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/include/dll) set(ENV{TCMALLOC_LARGE_ALLOC_REPORT_THRESHOLD} 500000000000) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_USE_CXX11_ABI=0 -g -DDEBUG -Wall -Wextra") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_GLIBCXX_USE_CXX11_ABI=0 -Ofast -DNDEBUG -march=native -mtune=native -ftree-vectorize") add_compile_options(-march=native -Wall -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -fopenmp -fopenmp-simd -funroll-loops -Wfatal-errors -DUSE_ACCELERATED_PQ -DUSE_AVX2) #OpenMP find_package(OpenMP) if (OPENMP_FOUND) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} ") else() message(FATAL_ERROR "No OpenMP support") endif() set(INTEL_ROOT /srv/software/easybuild/software/imkl/2020.4.304-iimpi-2020b/) set(MKL_ROOT ${INTEL_ROOT}/mkl) add_compile_options(-m64 -Wl,--no-as-needed) link_libraries(mkl_intel_ilp64 mkl_intel_thread mkl_core iomp5 pthread m dl) link_directories(${INTEL_ROOT}/lib/intel64 ${MKL_ROOT}/lib/intel64) set(Gperftools_INCLUDE_DIR /home/ilias.azizi/lustre/scalableml-um6p-st-sccs-10v5rwpbsmu/azizi-lustre/projects/libs/gperftools/src/) set(Gperftools_LIBRARY_DIR /home/ilias.azizi/lustre/scalableml-um6p-st-sccs-10v5rwpbsmu/azizi-lustre/projects/libs/gperftools/build/) include_directories(${Gperftools_INCLUDE_DIR}) link_directories(${Gperftools_LIBRARY_DIR}) set(LIBAIO_INCLUDE_DIR /srv/software/easybuild/software/libaio/0.3.112-GCCcore-10.3.0/include/) set(LIBAIO_LIBRARY_DIR /srv/software/easybuild/software/libaio/0.3.112-GCCcore-10.3.0/lib/) include_directories(${LIBAIO_INCLUDE_DIR}) link_directories(${LIBAIO_LIBRARY_DIR}) set(Boost_INCLUDE_DIR /srv/software/easybuild/software/Boost/1.76.0-GCC-10.3.0/include) set(Boost_LIBRARY_DIR /srv/software/easybuild/software/Boost/1.76.0-GCC-10.3.0/lib/) find_package(Boost REQUIRED COMPONENTS timer chrono system program_options) if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIR}) link_directories(${Boost_LIBRARY_DIR}) endif() add_definitions(-DMKL_ILP64) include_directories(include ${INTEL_ROOT}/include ${MKL_ROOT}/include) add_subdirectory(src) add_subdirectory(tests) the error is the following:
CMakeFiles/vamana.dir/vamana.cpp.o: In function `boost::program_options::typed_value::xparse(boost::any&, std::vector const&) const': vamana.cpp:(.text._ZNK5boost15program_options11typed_valueISscE6xparseERNS_3anyERKSt6vectorISsSaISsEE[_ZNK5boost15program_options11typed_valueISscE6xparseERNS_3anyERKSt6vectorISsSaISsEE]+0x19): undefined reference to `boost::program_options::validate(boost::any&, std::vector const&, std::string*, int)' CMakeFiles/vamana.dir/vamana.cpp.o: In function `boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::string const&, std::string const&, int)': vamana.cpp:(.text._ZN5boost15program_options16validation_errorC2ENS1_6kind_tERKSsS4_i[_ZN5boost15program_options16validation_errorC5ENS1_6kind_tERKSsS4_i]+0x25): undefined reference to `boost::program_options::validation_error::get_template(boost::program_options::validation_error::kind_t)' vamana.cpp:(.text._ZN5boost15program_options16validation_errorC2ENS1_6kind_tERKSsS4_i[_ZN5boost15program_options16validation_errorC5ENS1_6kind_tERKSsS4_i]+0x3d): undefined reference to `boost::program_options::error_with_option_name::error_with_option_name(std::string const&, std::string const&, std::string const&, int)' CMakeFiles/vamana.dir/vamana.cpp.o: In function `boost::program_options::basic_command_line_parser::basic_command_line_parser(int, char const* const*)': vamana.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcEC2EiPKPKc[_ZN5boost15program_options25basic_command_line_parserIcEC5EiPKPKc]+0x29d): undefined reference to `boost::program_options::to_internal(std::string const&)' vamana.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcEC2EiPKPKc[_ZN5boost15program_options25basic_command_line_parserIcEC5EiPKPKc]+0x321): undefined reference to `boost::program_options::detail::cmdline::cmdline(std::vector const&)' ...
Источник: https://stackoverflow.com/questions/781 ... lease-mode
I have an issue related to my C++ project, where i use boost lib. The problem arises when I try to build the project in release mode using cmake: the boost library is not identified(multiple undefined reference errors), even though I checked in cmake that everything works well(Boost_FOUND). The issue only occurs for release, when I use debug flag, my project building works fine. here is the cmake list:
cmake_minimum_required(VERSION 3.2) set(CMAKE_STANDARD 14) set(CMAKE_CXX_COMPILER g++) project(diskann) include_directories(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/include/dll) set(ENV{TCMALLOC_LARGE_ALLOC_REPORT_THRESHOLD} 500000000000) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_GLIBCXX_USE_CXX11_ABI=0 -g -DDEBUG -Wall -Wextra") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -D_GLIBCXX_USE_CXX11_ABI=0 -Ofast -DNDEBUG -march=native -mtune=native -ftree-vectorize") add_compile_options(-march=native -Wall -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free -fopenmp -fopenmp-simd -funroll-loops -Wfatal-errors -DUSE_ACCELERATED_PQ -DUSE_AVX2) #OpenMP find_package(OpenMP) if (OPENMP_FOUND) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS} ") else() message(FATAL_ERROR "No OpenMP support") endif() set(INTEL_ROOT /srv/software/easybuild/software/imkl/2020.4.304-iimpi-2020b/) set(MKL_ROOT ${INTEL_ROOT}/mkl) add_compile_options(-m64 -Wl,--no-as-needed) link_libraries(mkl_intel_ilp64 mkl_intel_thread mkl_core iomp5 pthread m dl) link_directories(${INTEL_ROOT}/lib/intel64 ${MKL_ROOT}/lib/intel64) set(Gperftools_INCLUDE_DIR /home/ilias.azizi/lustre/scalableml-um6p-st-sccs-10v5rwpbsmu/azizi-lustre/projects/libs/gperftools/src/) set(Gperftools_LIBRARY_DIR /home/ilias.azizi/lustre/scalableml-um6p-st-sccs-10v5rwpbsmu/azizi-lustre/projects/libs/gperftools/build/) include_directories(${Gperftools_INCLUDE_DIR}) link_directories(${Gperftools_LIBRARY_DIR}) set(LIBAIO_INCLUDE_DIR /srv/software/easybuild/software/libaio/0.3.112-GCCcore-10.3.0/include/) set(LIBAIO_LIBRARY_DIR /srv/software/easybuild/software/libaio/0.3.112-GCCcore-10.3.0/lib/) include_directories(${LIBAIO_INCLUDE_DIR}) link_directories(${LIBAIO_LIBRARY_DIR}) set(Boost_INCLUDE_DIR /srv/software/easybuild/software/Boost/1.76.0-GCC-10.3.0/include) set(Boost_LIBRARY_DIR /srv/software/easybuild/software/Boost/1.76.0-GCC-10.3.0/lib/) find_package(Boost REQUIRED COMPONENTS timer chrono system program_options) if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIR}) link_directories(${Boost_LIBRARY_DIR}) endif() add_definitions(-DMKL_ILP64) include_directories(include ${INTEL_ROOT}/include ${MKL_ROOT}/include) add_subdirectory(src) add_subdirectory(tests) the error is the following:
CMakeFiles/vamana.dir/vamana.cpp.o: In function `boost::program_options::typed_value::xparse(boost::any&, std::vector const&) const': vamana.cpp:(.text._ZNK5boost15program_options11typed_valueISscE6xparseERNS_3anyERKSt6vectorISsSaISsEE[_ZNK5boost15program_options11typed_valueISscE6xparseERNS_3anyERKSt6vectorISsSaISsEE]+0x19): undefined reference to `boost::program_options::validate(boost::any&, std::vector const&, std::string*, int)' CMakeFiles/vamana.dir/vamana.cpp.o: In function `boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::string const&, std::string const&, int)': vamana.cpp:(.text._ZN5boost15program_options16validation_errorC2ENS1_6kind_tERKSsS4_i[_ZN5boost15program_options16validation_errorC5ENS1_6kind_tERKSsS4_i]+0x25): undefined reference to `boost::program_options::validation_error::get_template(boost::program_options::validation_error::kind_t)' vamana.cpp:(.text._ZN5boost15program_options16validation_errorC2ENS1_6kind_tERKSsS4_i[_ZN5boost15program_options16validation_errorC5ENS1_6kind_tERKSsS4_i]+0x3d): undefined reference to `boost::program_options::error_with_option_name::error_with_option_name(std::string const&, std::string const&, std::string const&, int)' CMakeFiles/vamana.dir/vamana.cpp.o: In function `boost::program_options::basic_command_line_parser::basic_command_line_parser(int, char const* const*)': vamana.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcEC2EiPKPKc[_ZN5boost15program_options25basic_command_line_parserIcEC5EiPKPKc]+0x29d): undefined reference to `boost::program_options::to_internal(std::string const&)' vamana.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcEC2EiPKPKc[_ZN5boost15program_options25basic_command_line_parserIcEC5EiPKPKc]+0x321): undefined reference to `boost::program_options::detail::cmdline::cmdline(std::vector const&)' ...
Источник: https://stackoverflow.com/questions/781 ... lease-mode
Мобильная версия