Boost logo

Boost Users :

From: Stefano Gragnani (stefano.gragnani_at_[hidden])
Date: 2021-07-23 06:57:26


The development system is:
MacBook Pro Intel i9
MacOS Big Sur 11.4
gcc version 11.1.0 (Homebrew GCC 11.1.0_1)
clang version 12.0.0

I'm having trouble compiling some examples from the book 'Boost C ++ Application Development Cookbook’.
The problem occurs only with g ++, with clang there is no error.
Mistakes only occur when linking to -lboost_program_options, -lboost_system and -lboost_filesystem, with any other library (eg -lboost_chrono) everything is fine.

Furthermore, it should be noted that by linking with -lboost_system and -lboost_filesystem no compilation / linking errors are obtained but we get a SEGMENTATION FAULT (ONLY when compiling with g++, compiling with Clang the program run fine), instead linking with -lboost_program_options results in linking errors.

This is the example:

#include <boost/program_options.hpp>
#include <iostream>

namespace opt = boost::program_options;

int main(int argc, char *argv[])
{
    // Constructing an options describing variable and giving it a
    // textual description "All options"
    opt::options_description desc("All options");

    // When we are adding options, first parameter is a name
    // to be used in command line. Second parameter is a type
    // of that option, wrapped in value<> class. Third parameter
    // must be a short description of that option.
    desc.add_options()
        ("apples", opt::value<int>(), "how many apples do you have")
        ("oranges", opt::value<int>(), "how many oranges do you have")
        ("help", "produce help message")
    ;

    // Variable to store our command line arguments
    opt::variables_map vm;

    // Parsing and storing arguments
    opt::store(opt::parse_command_line(argc, argv, desc), vm);

    // Must be called after all the parsing and storing
    opt::notify(vm);

    if (vm.count("help")) {
        std::cout << desc << "\n";
        return 1;
    }

    std::cout << "Fruits count: "
        << vm["apples"].as<int>() + vm["oranges"].as<int>()
        << std::endl;
}

and these are the errors:

Undefined symbols for architecture x86_64:
  "__ZN5boost15program_options11to_internalERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", referenced from:
      __ZN5boost15program_options11to_internalINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEESt6vectorIS7_SaIS7_EERKS8_IT_SaISB_EE in ccmlvHtI.o
  "__ZN5boost15program_options16validation_error12get_templateB5cxx11ENS1_6kind_tE", referenced from:
      __ZN5boost15program_options16validation_errorC1ENS1_6kind_tERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_i in ccmlvHtI.o
  "__ZN5boost15program_options19options_descriptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEjj", referenced from:
      _main in ccmlvHtI.o
  "__ZN5boost15program_options20invalid_option_valueC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", referenced from:
      __ZN5boost15program_options8validateIicEEvRNS_3anyERKSt6vectorINSt7__cxx1112basic_stringIT0_St11char_traitsIS7_ESaIS7_EEESaISB_EEPT_l in ccmlvHtI.o
  "__ZN5boost15program_options22error_with_option_nameC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_S9_i", referenced from:
      __ZN5boost15program_options16validation_errorC1ENS1_6kind_tERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_i in ccmlvHtI.o
  "__ZN5boost15program_options3argB5cxx11E", referenced from:
      __ZNK5boost15program_options11typed_valueIicE4nameB5cxx11Ev in ccmlvHtI.o
  "__ZN5boost15program_options6detail7cmdline21set_additional_parserENS_9function1ISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_ERKSA_EE", referenced from:
      __ZN5boost15program_options25basic_command_line_parserIcE12extra_parserENS_9function1ISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESA_ERKSA_EE in ccmlvHtI.o
  "__ZN5boost15program_options6detail7cmdlineC2ERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS9_EE", referenced from:
      __ZN5boost15program_options25basic_command_line_parserIcEC1EiPKPKc in ccmlvHtI.o
  "__ZN5boost15program_optionslsERSoRKNS0_19options_descriptionE", referenced from:
      _main in ccmlvHtI.o
  "__ZNK5boost15program_options22abstract_variables_mapixERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", referenced from:
      __ZNK5boost15program_options13variables_mapixERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE in ccmlvHtI.o
  "__ZNK5boost15program_options22error_with_option_name23substitute_placeholdersERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", referenced from:
      __ZTVN5boost15program_options20invalid_option_valueE in ccmlvHtI.o
      __ZTVN5boost15program_options16validation_errorE in ccmlvHtI.o
      __ZTVN5boost10wrapexceptINS_15program_options16validation_errorEEE in ccmlvHtI.o
      __ZTVN5boost10wrapexceptINS_15program_options20invalid_option_valueEEE in ccmlvHtI.o
  "__ZNK5boost15program_options29value_semantic_codecvt_helperIcE5parseERNS_3anyERKSt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaISB_EEb", referenced from:
      __ZTVN5boost15program_options11typed_valueIicEE in ccmlvHtI.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
The terminal process "zsh '-c', 'g++-11 -g -I/usr/local/Cellar/boost/1.76.0/include/ -I/usr/local/include/ -L/usr/local/Cellar/boost/1.76.0/lib/ -lboost_program_options -std=gnu++20 Chapter01/01_A_program_options_base/main.cpp -o Chapter01/01_A_program_options_base/main'" terminated with exit code: 1.

The compile options are (Visual Studio Code):

"label": "Build with g++ 11",
        "type": "shell",
        "command": "g++-11",
        "args": [
          "-g",
          "-I/usr/local/Cellar/boost/1.76.0/include/",
          "-I/usr/local/include/",
          "-L/usr/local/Cellar/boost/1.76.0/lib/",
          "-lboost_program_options",
          // "-lboost_system",
          // "-lboost_filesystem",
          // "-lboost_chrono",
          "-std=gnu++20",
          "Chapter01/01_A_program_options_base/main.cpp",
        // "-L/usr/local/Cellar/gcc/11.1.0_1/lib/gcc/11/",
          "-o",
          "Chapter01/01_A_program_options_base/main"
        ]
Thanks
Stefano Gragnani



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net