Here I have read good references about FANN for Artificial Neural Networks in C/C++.
Actually I am using C++ (on Ubuntu with g++ v4.6.1). The library written in C, has a wrapper for C++. But I don't get it to work. Even the example included xor_sample.cpp works.
I have a Makefile with a line like this:
xor_sample:
g++ -I $(FANNINCLUDE) xor_sample.cpp -o xor_sample
Being FANNINCLUDE the path to FANN/src/include, where the headers are (floatfan.h and fann_cpp.h).
Has somebody actually compiled it for C++? What I am doing wrong?
My intention is to use the headers files (NOT installing the library and linking with -lfann). Is this possible?
EDIT: I get this errors
/tmp/ccIpH6p4.o: In function `FANN::training_data::destroy_train()':
xor_sample.cpp:(.text._ZN4FANN13training_data13destroy_trainEv[FANN::training_data::destroy_train()]+0x18): undefined reference to `fann_destroy_train'
/tmp/ccIpH6p4.o: In function `FANN::training_data::read_train_from_file(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
xor_sample.cpp:(.text._ZN4FANN13training_data20read_train_from_fileERKSs[FANN::training_data::read_train_from_file(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x20): undefined reference to `fann_read_train_from_file'
/tmp/ccIpH6p4.o: In function `FANN::training_data::save_train_to_fixed(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)':
xor_sample.cpp:(.text._ZN4FANN13training_data19save_train_to_fixedERKSsj[FANN::training_data::save_train_to_fixed(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int)]+0x37): undefined reference to `fann_save_train_to_fixed'
/tmp/ccIpH6p4.o: In function `FANN::training_data::length_train_data()':
xor_sample.cpp:(.text._ZN4FANN13training_data17length_train_dataEv[FANN::training_data::length_train_data()]+0x1f): undefined reference to `fann_length_train_data'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::destroy()':
xor_sample.cpp:(.text._ZN4FANN10neural_net7destroyEv[FANN::neural_net::destroy()]+0x18): undefined reference to `fann_get_user_data'
xor_sample.cpp:(.text._ZN4FANN10neural_net7destroyEv[FANN::neural_net::destroy()]+0x39): undefined reference to `fann_destroy'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::create_standard_array(unsigned int, unsigned int const*)':
xor_sample.cpp:(.text._ZN4FANN10neural_net21create_standard_arrayEjPKj[FANN::neural_net::create_standard_array(unsigned int, unsigned int const*)]+0x1f): undefined reference to `fann_create_standard_array'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::run(float*)':
xor_sample.cpp:(.text._ZN4FANN10neural_net3runEPf[FANN::neural_net::run(float*)]+0x26): undefined reference to `fann_run'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::init_weights(FANN::training_data const&)':
xor_sample.cpp:(.text._ZN4FANN10neural_net12init_weightsERKNS_13training_dataE[FANN::neural_net::init_weights(FANN::training_data const&)]+0x2a): undefined reference to `fann_init_weights'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
xor_sample.cpp:(.text._ZN4FANN10neural_net4saveERKSs[FANN::neural_net::save(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x30): undefined reference to `fann_save'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::save_to_fixed(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
xor_sample.cpp:(.text._ZN4FANN10neural_net13save_to_fixedERKSs[FANN::neural_net::save_to_fixed(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x30): undefined reference to `fann_save_to_fixed'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::train_on_data(FANN::training_data const&, unsigned int, unsigned int, float)':
xor_sample.cpp:(.text._ZN4FANN10neural_net13train_on_dataERKNS_13training_dataEjjf[FANN::neural_net::train_on_data(FANN::training_data const&, unsigned int, unsigned int, float)]+0x3f): undefined reference to `fann_train_on_data'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::get_MSE()':
xor_sample.cpp:(.text._ZN4FANN10neural_net7get_MSEEv[FANN::neural_net::get_MSE()]+0x20): undefined reference to `fann_get_MSE'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::set_callback(int (*)(FANN::neural_net&, FANN::training_data&, unsigned int, unsigned int, float, unsigned int, void*), void*)':
xor_sample.cpp:(.text._ZN4FANN10neural_net12set_callbackEPFiRS0_RNS_13training_dataEjjfjPvES4_[FANN::neural_net::set_callback(int (*)(FANN::neural_net&, FANN::training_data&, unsigned int, unsigned int, float, unsigned int, void*), void*)]+0x1c): undefined reference to `fann_get_user_data'
xor_sample.cpp:(.text._ZN4FANN10neural_net12set_callbackEPFiRS0_RNS_13training_dataEjjfjPvES4_[FANN::neural_net::set_callback(int (*)(FANN::neural_net&, FANN::training_data&, unsigned int, unsigned int, float, unsigned int, void*), void*)]+0x81): undefined reference to `fann_set_user_data'
xor_sample.cpp:(.text._ZN4FANN10neural_net12set_callbackEPFiRS0_RNS_13training_dataEjjfjPvES4_[FANN::neural_net::set_callback(int (*)(FANN::neural_net&, FANN::training_data&, unsigned int, unsigned int, float, unsigned int, void*), void*)]+0x9c): undefined reference to `fann_set_callback'
xor_sample.cpp:(.text._ZN4FANN10neural_net12set_callbackEPFiRS0_RNS_13training_dataEjjfjPvES4_[FANN::neural_net::set_callback(int (*)(FANN::neural_net&, FANN::training_data&, unsigned int, unsigned int, float, unsigned int, void*), void*)]+0xb3): undefined reference to `fann_set_callback'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::print_parameters()':
xor_sample.cpp:(.text._ZN4FANN10neural_net16print_parametersEv[FANN::neural_net::print_parameters()]+0x18): undefined reference to `fann_print_parameters'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::set_learning_rate(float)':
xor_sample.cpp:(.text._ZN4FANN10neural_net17set_learning_rateEf[FANN::neural_net::set_learning_rate(float)]+0x1f): undefined reference to `fann_set_learning_rate'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::set_activation_function_hidden(FANN::activation_function_enum)':
xor_sample.cpp:(.text._ZN4FANN10neural_net30set_activation_function_hiddenENS_24activation_function_enumE[FANN::neural_net::set_activation_function_hidden(FANN::activation_function_enum)]+0x1f): undefined reference to `fann_set_activation_function_hidden'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::set_activation_function_output(FANN::activation_function_enum)':
xor_sample.cpp:(.text._ZN4FANN10neural_net30set_activation_function_outputENS_24activation_function_enumE[FANN::neural_net::set_activation_function_output(FANN::activation_function_enum)]+0x1f): undefined reference to `fann_set_activation_function_output'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::set_activation_steepness_hidden(float)':
xor_sample.cpp:(.text._ZN4FANN10neural_net31set_activation_steepness_hiddenEf[FANN::neural_net::set_activation_steepness_hidden(float)]+0x1f): undefined reference to `fann_set_activation_steepness_hidden'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::set_activation_steepness_output(float)':
xor_sample.cpp:(.text._ZN4FANN10neural_net31set_activation_steepness_outputEf[FANN::neural_net::set_activation_steepness_output(float)]+0x1f): undefined reference to `fann_set_activation_steepness_output'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::get_network_type()':
xor_sample.cpp:(.text._ZN4FANN10neural_net16get_network_typeEv[FANN::neural_net::get_network_type()]+0x1f): undefined reference to `fann_get_network_type'
/tmp/ccIpH6p4.o: In function `FANN::neural_net::internal_callback(fann*, fann_train_data*, unsigned int, unsigned int, float, unsigned int)':
xor_sample.cpp:(.text._ZN4FANN10neural_net17internal_callbackEP4fannP15fann_train_datajjfj[FANN::neural_net::internal_callback(fann*, fann_train_data*, unsigned int, unsigned int, float, unsigned int)]+0xe): undefined reference to `fann_get_user_data'
collect2: ld returned 1 exit status
make: *** [xor_sample] Error 1
if you just need them installed, they are already on ubuntu repository
sudo apt-get install libfann1 libfann1-dev
if you still want to install it from source, there's a guide on their page
http://leenissen.dk/fann/wp/help/installing-fann/
if this doesn't bring you further, try installing to other location using:
cmake -D CMAKE_INSTALL_PREFIX:PATH=/usr .
Hope this helps
You should still be able to compile it without installing FANN by correcting your makefile
g++ -I $(FANNINCLUDE) xor_sample.cpp -o xor_sample -L $(FANNLIBS) -lfann
Of course you will still need to have compiled LibFANN, and "FANNLIBS" will have to be the directory of the compiled libraries of libfann.
Related
I am upgrading one of our libraries to the latest version. The xalan from GitHub at https://github.com/apache/xalan-c. I was able to compile this library successfully using gcc 12. And when I ran make test command, it was all OK. But when used it in my code and it will fail when try to link, I got errors like this (I did check the library search path, both libxalan-c.so and libxalanMsg.so can be found by the ld):
g++ -g -O0 -Werror -Wunused -Wall -D__USE_XOPEN2K8 -D_REENTRANT -D__STL_PTHREADS -std=c++17 -pthread -Wno-parentheses -Wno-nonnull -pipe -lxerces-c -L/rapid/rapid_workspaces/chuhuan/GitHub/xalan-c/build/lib64/ -lxalan-c -lxalanMsg -Lxxxxxxxxx/TargetRTS/ -ldhf
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: linux/TargetRTS/ParamConfig.o: in function `dhf::DataHandlerFactory::initializeXMLLibs()':
xxxxxxxxx/DataHandlerFactory.hh:58: undefined reference to `xalanc_1_12::XalanTransformer::initialize(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DataHandlerFactory.hh:59: undefined reference to `xalanc_1_12::XPathEvaluator::initialize(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/TargetRTS//libdhf.a(DOMImpl.o): in function `dhf::DOMImpl::transform(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
xxxxxxxxx/DOMImpl.cc:173: undefined reference to `xalanc_1_12::XercesParserLiaison::XercesParserLiaison(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:183: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(char16_t const*, xercesc_4_0::MemoryManager&, unsigned long)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:184: undefined reference to `xalanc_1_12::XercesDOMWrapperParsedSource::XercesDOMWrapperParsedSource(xercesc_4_0::DOMDocument const*, xalanc_1_12::XercesParserLiaison&, xalanc_1_12::XercesDOMSupport&, xalanc_1_12::XalanDOMString const&, xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:190: undefined reference to `xalanc_1_12::FormatterToXercesDOM::FormatterToXercesDOM(xercesc_4_0::DOMDocument*, xercesc_4_0::DOMElement*, xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:191: undefined reference to `xalanc_1_12::XalanTransformer::XalanTransformer(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:192: undefined reference to `xalanc_1_12::XSLTResultTarget::XSLTResultTarget(xalanc_1_12::FormatterListener&, xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:192: undefined reference to `xalanc_1_12::XSLTInputSource::XSLTInputSource(char const*, xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/TargetRTS//libdhf.a(DOMImpl.o): in function `dhf::DOMImpl::get(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, double*)':
xxxxxxxxx/DOMImpl.cc:237: undefined reference to `xalanc_1_12::XercesParserLiaison::XercesParserLiaison(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:244: undefined reference to `xalanc_1_12::XercesParserLiaison::createDocument(xercesc_4_0::DOMDocument const*, bool, bool, bool)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:246: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(char const*, xercesc_4_0::MemoryManager&, unsigned long)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:248: undefined reference to `xalanc_1_12::XPathEvaluator::XPathEvaluator(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:250: undefined reference to `xalanc_1_12::XPathEvaluator::evaluate(xalanc_1_12::DOMSupport&, xalanc_1_12::XalanNode*, char16_t const*, xalanc_1_12::XalanElement const*)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/TargetRTS//libdhf.a(DOMImpl.o): in function `dhf::DOMImpl::getSize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int*)':
xxxxxxxxx/DOMImpl.cc:298: undefined reference to `xalanc_1_12::XercesParserLiaison::XercesParserLiaison(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:305: undefined reference to `xalanc_1_12::XercesParserLiaison::createDocument(xercesc_4_0::DOMDocument const*, bool, bool, bool)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:307: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(char const*, xercesc_4_0::MemoryManager&, unsigned long)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:309: undefined reference to `xalanc_1_12::XPathEvaluator::XPathEvaluator(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:313: undefined reference to `xalanc_1_12::XPathEvaluator::selectSingleNode(xalanc_1_12::DOMSupport&, xalanc_1_12::XalanNode*, char16_t const*, xalanc_1_12::XalanElement const*)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/TargetRTS//libdhf.a(DOMImpl.o): in function `dhf::DOMImpl::get(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
xxxxxxxxx/DOMImpl.cc:364: undefined reference to `xalanc_1_12::XercesParserLiaison::XercesParserLiaison(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:371: undefined reference to `xalanc_1_12::XercesParserLiaison::createDocument(xercesc_4_0::DOMDocument const*, bool, bool, bool)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:373: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(char const*, xercesc_4_0::MemoryManager&, unsigned long)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:375: undefined reference to `xalanc_1_12::XPathEvaluator::XPathEvaluator(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:377: undefined reference to `xalanc_1_12::XPathEvaluator::evaluate(xalanc_1_12::DOMSupport&, xalanc_1_12::XalanNode*, char16_t const*, xalanc_1_12::XalanElement const*)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/TargetRTS//libdhf.a(DOMImpl.o): in function `dhf::DOMImpl::serialize(std::ostream&)':
xxxxxxxxx/DOMImpl.cc:486: undefined reference to `xalanc_1_12::XalanStdOutputStream::XalanStdOutputStream(std::ostream&, xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:490: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:490: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:490: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:490: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:490: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/TargetRTS//libdhf.a(DOMImpl.o):xxxxxxxxx/DOMImpl.cc:490: more undefined references to `xalanc_1_12::XalanDOMString::XalanDOMString(xercesc_4_0::MemoryManager&)' follow
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/TargetRTS//libdhf.a(DOMImpl.o): in function `dhf::DOMImpl::serialize(std::ostream&)':
xxxxxxxxx/DOMImpl.cc:490: undefined reference to `xalanc_1_12::FormatterToXML::FormatterToXML(xalanc_1_12::Writer&, xalanc_1_12::XalanDOMString const&, bool, int, xalanc_1_12::XalanDOMString const&, xalanc_1_12::XalanDOMString const&, xalanc_1_12::XalanDOMString const&, xalanc_1_12::XalanDOMString const&, bool, xalanc_1_12::XalanDOMString const&, xalanc_1_12::FormatterListener::eFormat, bool, xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:501: undefined reference to `xalanc_1_12::XercesDOMWalker::traverse(xercesc_4_0::DOMNode*)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/TargetRTS//libdhf.a(DOMImpl.o): in function `dhf::DOMImpl::selectNode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
xxxxxxxxx/DOMImpl.cc:510: undefined reference to `xalanc_1_12::XercesParserLiaison::XercesParserLiaison(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:517: undefined reference to `xalanc_1_12::XercesParserLiaison::createDocument(xercesc_4_0::DOMDocument const*, bool, bool, bool)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:522: undefined reference to `xalanc_1_12::XalanDOMString::XalanDOMString(char const*, xercesc_4_0::MemoryManager&, unsigned long)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:527: undefined reference to `xalanc_1_12::XPathEvaluator::XPathEvaluator(xercesc_4_0::MemoryManager&)'
xxxxxxxxxgcc-12.2.0/../binutils-2.36.1/bin/ld: xxxxxxxxx/DOMImpl.cc:528: undefined reference to `xalanc_1_12::XPathEvaluator::selectSingleNode(xalanc_1_12::DOMSupport&, xalanc_1_12::XalanNode*, char16_t const*, xalanc_1_12::XalanElement const*)'
collect2: error: ld returned 1 exit status
my cmake options:
CC=gcc-12.2.0/bin/gcc CXX=gcc-12.2.0/bin/g++ CFLAGS=-O3 CXXFLAGS=-O3 cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=xalan-c/build -DCMAKE_BUILD_TYPE=Release -Dmessage-loader=inmemory -Dtranscoder=default xalan-c
It seems something may be inconsistent with my build options, any idea to fix this?
Thanks very much!
Chunde
Eventually figured out the issue, this was because Xalan need to link to Xercesc, without specifying the path to the version 4.0.0 of Xercesc, it will link to the default version at system path. So I used
-DCMAKE_PREFIX_PATH
variable to set that, the new cmake command looks like this:
CC=gcc-12.2.0/bin/gcc CXX=gcc-12.2.0/bin/g++ CFLAGS=-O3 CXXFLAGS=-O3 cmake -DCMAKE_PREFIX_PATH=xxx/xerces-c_4.0.0/ -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=xalan-c/build -DCMAKE_BUILD_TYPE=Release -Dmessage-loader=inmemory -Dtranscoder=default xalan-c
I am working on one project where I need to compile all our backend c++ applications from centos to rhel8 Linux machine. I am facing a boost program option error with the boost 1.66 version which comes preloaded in rhel8. If I use boost 1.63 it works for me but mt library. mt library is not available in boost 1.66 version. So i made few changes in makefile. Please find below the difference of make file between 1.63 and 1.66 boost. I am getting program option linking error . Please help me to solve this issue.
working command-line compilation with boost 1.63.
/usr/bin/g++ -o /home/rhel8/allan/dev/kevlar/bin/linux5_64_DBG/toolset -g -export-dynamic -Wl,"-(" /home/rhel8/allan/dev/kevlar/tools/linux5_64_DBG/KevlarToolSet.o /home/rhel8/allan/dev/kevlar/tools/linux5_64_DBG/KevlarToolSetMain.o /home/rhel8/allan/dev/kevlar/tools/linux5_64_DBG/KevlarJournalEditorTool.o /home/rhel8/allan/dev/kevlar/tools/linux5_64_DBG/KevlarQueryCheckpointTool.o /home/rhel8/allan/dev/cure/lib/linux5_64_DBG/libcureapplication.a /home/rhel8/allan/dev/eqmon/lib/linux5_64_DBG/libeqmon-mt.a /home/rhel8/allan/dev/eqcyclopsmon/lib/linux5_64_DBG/libeqcyclopsmon.a /home/rhel8/allan/dev/ivcom/src/linux5_64_DBG/libivcom.a /home/rhel8/allan/dev/gslog/lib/linux5_64_DBG/libgslog-mt.a /home/rhel8/allan/dev/gscpputil/linux5_64_DBG/libgscpputil.a /home/rhel8/allan/dev/pcre/linux5_64/lib/libpcre.a /home/rhel8/allan/dev/pcre/linux5_64/lib/libpcrecpp.a /home/rhel8/allan/dev/gscushmdb/linux5_64_DBG/libgscushmdb.a /home/rhel8/allan/dev/hermes/lib/linux5_64_DBG/libhermescommandmanager.a /home/rhel8/allan/dev/hermes/lib/linux5_64_DBG/libhermescommon.a /home/rhel8/allan/dev/ivshmdb/api/linux5_64_DBG/libivshmdbapi.a /home/rhel8/allan/dev/ivshmdb/lib/linux5_64_DBG/libIvShmDbUserEnums.a /home/rhel8/allan/dev/ivshmdb/lib/linux5_64_DBG/libivshmdbcommanddefinition.a /home/rhel8/allan/dev/ivshmdb/lib/linux5_64_DBG/libIvShmDbUserRecords.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarapplication.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarcurrenttime.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarcommandlinetools.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlardatastreampair.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarflightrecorder.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarjournalmanager.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarmessagewrapper.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarreplicator.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarresources.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarsharedmemoryutils.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlartransaction.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlaruniqueid.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libKevlarUserEnums.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarcommanddefinition.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libKevlarUserRecords.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libUserRecords.a -Wl,"-)" /home/rhel8/allan/boost_1.63/lib/libboost_filesystem-mt.a /home/rhel8/allan/boost_1.63/lib/libboost_regex-mt.a /home/rhel8/allan/boost_1.63/lib/libboost_program_options-mt.a /home/rhel8/allan/boost_1.63/lib/libboost_date_time-mt.a /home/rhel8/allan/boost_1.63/lib/libboost_system-mt.a -lexpat /home/rhel8/allan/dev/pcre/linux5_64/lib/libpcre.a /home/rhel8/allan/dev/pcre/linux5_64/lib/libpcrecpp.a /usr/lib64/libpython2.7.so -pthread -Xlinker -ldl -ltirpc -lutil -lrt
/home/rhel8/allan/boost_1.63/lib/libboost_filesystem-mt.a /home/rhel8/allan/boost_1.63/lib/libboost_regex-mt.a /home/rhel8/allan/boost_1.63/lib/libboost_program_options-mt.a /home/rhel8/allan/boost_1.63/lib/libboost_date_time-mt.a /home/rhel8/allan/boost_1.63/lib/libboost_system-mt.a
non working command line compilation with boost 1.66
/usr/bin/g++ -o /home/rhel8/allan/dev/kevlar/bin/linux5_64_DBG/toolset -g -export-dynamic -Wl,"-(" /home/rhel8/allan/dev/kevlar/tools/linux5_64_DBG/KevlarToolSet.o /home/rhel8/allan/dev/kevlar/tools/linux5_64_DBG/KevlarToolSetMain.o /home/rhel8/allan/dev/kevlar/tools/linux5_64_DBG/KevlarJournalEditorTool.o /home/rhel8/allan/dev/kevlar/tools/linux5_64_DBG/KevlarQueryCheckpointTool.o /home/rhel8/allan/dev/cure/lib/linux5_64_DBG/libcureapplication.a /home/rhel8/allan/dev/eqmon/lib/linux5_64_DBG/libeqmon-mt.a /home/rhel8/allan/dev/eqcyclopsmon/lib/linux5_64_DBG/libeqcyclopsmon.a /home/rhel8/allan/dev/ivcom/src/linux5_64_DBG/libivcom.a /home/rhel8/allan/dev/gslog/lib/linux5_64_DBG/libgslog-mt.a /home/rhel8/allan/dev/gscpputil/linux5_64_DBG/libgscpputil.a /home/rhel8/allan/dev/pcre/linux5_64/lib/libpcre.a /home/rhel8/allan/dev/pcre/linux5_64/lib/libpcrecpp.a /home/rhel8/allan/dev/gscushmdb/linux5_64_DBG/libgscushmdb.a /home/rhel8/allan/dev/hermes/lib/linux5_64_DBG/libhermescommandmanager.a /home/rhel8/allan/dev/hermes/lib/linux5_64_DBG/libhermescommon.a /home/rhel8/allan/dev/ivshmdb/api/linux5_64_DBG/libivshmdbapi.a /home/rhel8/allan/dev/ivshmdb/lib/linux5_64_DBG/libIvShmDbUserEnums.a /home/rhel8/allan/dev/ivshmdb/lib/linux5_64_DBG/libivshmdbcommanddefinition.a /home/rhel8/allan/dev/ivshmdb/lib/linux5_64_DBG/libIvShmDbUserRecords.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarapplication.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarcurrenttime.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarcommandlinetools.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlardatastreampair.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarflightrecorder.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarjournalmanager.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarmessagewrapper.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarreplicator.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarresources.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarsharedmemoryutils.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlartransaction.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlaruniqueid.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libKevlarUserEnums.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libkevlarcommanddefinition.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libKevlarUserRecords.a /home/rhel8/allan/dev/kevlar/lib/linux5_64_DBG/libUserRecords.a -Wl,"-)" -lboost_filesystem -lboost_regex -lboost_program_options -lboost_date_time -lboost_system -lexpat /home/rhel8/allan/dev/pcre/linux5_64/lib/libpcre.a /home/rhel8/allan/dev/pcre/linux5_64/lib/libpcrecpp.a /usr/lib64/libpython2.7.so -pthread -Xlinker -ldl -ltirpc -lutil -lrt
-lboost_filesystem -lboost_regex -lboost_program_options -lboost_date_time -lboost_system -lexpat
this library are available in /usr/lib64 folder with so extension.
Below is the error when i compile with boost 1.66
Error after compiling with 1.66 boost version
/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o):(.data.rel.ro._ZTVN5boost15program_options11typed_valueISt6vectorISsSaISsEEcEE[_ZTVN5boost15program_options11typed_valueISt6vectorISsSaISsEEcEE]+0x38): undefined reference to boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::string, std::allocator<std::string> > const&, bool) const' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o):(.data.rel.ro._ZTVN5boost15program_options11typed_valueISscEE[_ZTVN5boost15program_options11typed_valueISscEE]+0x38): undefined reference to boost::program_options::value_semantic_codecvt_helper::parse(boost::any&, std::vector<std::string, std::allocatorstd::string > const&, bool) const'
/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o):(.data.rel.ro._ZTVN5boost15program_options20invalid_option_valueE[_ZTVN5boost15program_options20invalid_option_valueE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::string const&) const' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o):(.data.rel.ro._ZTVN5boost15program_options16validation_errorE[_ZTVN5boost15program_options16validation_errorE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::string const&) const'
/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o): In function boost::program_options::typed_value<std::vector<std::string, std::allocator<std::string> >, char>::name() const': /usr/include/boost/program_options/detail/value_semantic.hpp:22: undefined reference to boost::program_options::arg'
/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o): In function boost::program_options::typed_value<std::string, char>::name() const':/usr/include/boost/program_options/detail/value_semantic.hpp:22: undefined reference to boost::program_options::arg' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o): In function boost::program_options::typed_value<std::string, char>::xparse(boost::any&, std::vector<std::string, std::allocator<std::string> > const&) const':/usr/include/boost/program_options/detail/value_semantic.hpp:184: undefined reference to boost::program_options::validate(boost::any&, std::vector<std::string, std::allocatorstd::string > const&, std::string*, int)' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o): In function void boost::program_options::validate<std::string, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<std::string, std::allocator<std::string> >*, int)': /usr/include/boost/program_options/detail/value_semantic.hpp:149: undefined reference to boost::program_options::validate(boost::any&, std::vector<std::string, std::allocatorstd::string > const&, std::string*, int)' /usr/include/boost/program_options/detail/value_semantic.hpp:153: undefined reference to boost::program_options::invalid_option_value::invalid_option_value(std::string const&)' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o):(.data.rel.ro._ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options20invalid_option_valueEEEEE[_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options20invalid_option_valueEEEEE]+0x38): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::string const&) const' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineToolSet.o):(.data.rel.ro._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::string const&) const' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineTool.o): In function KevlarCommandLineTool::KevlarCommandLineTool(std::string const&, std::string const&)':/home/rhel8/allan/dev/timer/commandLineTools/KevlarCommandLineTool.cpp:12: undefined reference to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineTool.o): In function boost::program_options::basic_command_line_parser::basic_command_line_parser(int, char const* const*)': /usr/include/boost/program_options/detail/parsers.hpp:44: undefined reference to boost::program_options::detail::cmdline::cmdline(std::vector<std::string, std::allocator<std::string> > const&)' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarCommandLineTool.o): In function std::vector<std::string, std::allocatorstd::string > boost::program_options::to_internalstd::string(std::vector<std::string, std::allocatorstd::string > const&)': /usr/include/boost/program_options/detail/convert.hpp:79: undefined reference to boost::program_options::to_internal(std::string const&)' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarJournalEditor.o): In function KevlarJournalEditor::KevlarJournalEditor(CureApplication*)': /home/rhel8/allan/dev/timer/commandLineTools/KevlarJournalEditor.cpp:36: undefined reference to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)' /home/rhel8/allan/dev/timer/commandLineTools/KevlarJournalEditor.cpp:36: undefined reference to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarJournalEditor.o): In function boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::string const&, std::string const&, int)': /usr/include/boost/program_options/errors.hpp:378: undefined reference to boost::program_options::validation_error::get_template(boost::program_options::validation_error::kind_t)' /usr/include/boost/program_options/errors.hpp:378: undefined reference to boost::program_options::error_with_option_name::error_with_option_name(std::string const&, std::string const&, std::string const&, int)'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarJournalEditor.o): In function boost::program_options::variables_map::operator[](std::string const&) const': /usr/include/boost/program_options/variables_map.hpp:155: undefined reference to boost::program_options::abstract_variables_map::operator[](std::string const&) const' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarJournalEditor.o):(.data.rel.ro._ZTVN5boost15program_options11typed_valueIicEE[_ZTVN5boost15program_options11typed_valueIicEE]+0x38): undefined reference to boost::program_options::value_semantic_codecvt_helper::parse(boost::any&, std::vector<std::string, std::allocatorstd::string > const&, bool) const'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarJournalEditor.o): In function boost::program_options::typed_value<int, char>::name() const':/usr/include/boost/program_options/detail/value_semantic.hpp:22: undefined reference to boost::program_options::arg' /home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarJournalEditor.o): In function void boost::program_options::validate<int, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, int*, long)':/usr/include/boost/program_options/detail/value_semantic.hpp:95: undefined reference to boost::program_options::invalid_option_value::invalid_option_value(std::string const&)'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarJournalEditor.o):(.data.rel.ro._ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEEE[_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_15program_options16validation_errorEEEEE]+0x38): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::string const&) const'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarJournalEditor.o):(.data.rel.ro._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::string const&) const'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarShmDatabaseUtility.o): In function KevlarShmDatabaseUtility::KevlarShmDatabaseUtility()':/home/rhel8/allan/dev/timer/commandLineTools/KevlarShmDatabaseUtility.cpp:38: undefined reference to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)'/home/rhel8/allan/dev/timer/commandLineTools/KevlarShmDatabaseUtility.cpp:38: undefined reference to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)'/home/rhel8/allan/dev/timer/commandLineTools/KevlarShmDatabaseUtility.cpp:38: undefined reference to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarShmEditor.o): In function KevlarShmEditor::KevlarShmEditor(CureApplication*)':/home/rhel8/allan/dev/timer/commandLineTools/KevlarShmEditor.cpp:278: undefined reference to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)'/home/rhel8/allan/dev/timer/commandLineTools/KevlarShmEditor.cpp:278: undefined reference to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarLogQueryTool.o):/home/rhel8/allan/dev/timer/commandLineTools/KevlarLogQueryTool.cpp:113: more undefined references to boost::program_options::options_description::options_description(std::string const&, unsigned int, unsigned int)' follow/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarLogQueryTool.o):(.data.rel.ro._ZTVN5boost15program_options11typed_valueIjcEE[_ZTVN5boost15program_options11typed_valueIjcEE]+0x38): undefined reference to boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::string, std::allocator<std::string> > const&, bool) const'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarLogQueryTool.o): In function boost::program_options::typed_value<unsigned int, char>::name() const':/usr/include/boost/program_options/detail/value_semantic.hpp:22: undefined reference to boost::program_options::arg'/home/rhel8/allan/dev/timer/lib/linux5_64_DBG/libtimercommandlinetools.a(KevlarLogQueryTool.o): In function void boost::program_options::validate<unsigned int, char>(boost::any&, std::vector<std::basic_string<char, std::char_traits, std::allocator >, std::allocator<std::basic_string<char, std::char_traits, std::allocator > > > const&, unsigned int*, long)':/usr/include/boost/program_options/detail/value_semantic.hpp:95: undefined reference to `boost::program_options::invalid_option_value::invalid_option_value(std::string const&)'collect2: error: ld returned 1 exit status
I am trying to run a sample program to create a SHA-1 hash using Cryptopp library in C++.
I have installed these packages on my system (running Ubuntu 20.04):
sudo apt-get install libcrypto++-dev libcrypto++-doc libcrypto++-utils
Here's the code of sample program I'm trying to run:
// test.cpp
#include "cryptopp/cryptlib.h"
#include "cryptopp/sha.h"
#include "cryptopp/files.h"
#include "cryptopp/hex.h"
#include <iostream>
int main(int argc, char *argv[])
{
using namespace CryptoPP;
HexEncoder encoder(new FileSink(std::cout));
std::string msg = "Yoda said, Do or do not. There is no try.";
std::string digest;
SHA1 hash;
hash.Update((const byte *)msg.data(), msg.size());
digest.resize(hash.DigestSize());
hash.Final((byte *)&digest[0]);
std::cout << "Message: " << msg << std::endl;
std::cout << "Digest: ";
StringSource(digest, true, new Redirector(encoder));
std::cout << std::endl;
return 0;
}
Upon compiling the program with given command, I am getting these errors:
elon#starlink:~/$ g++ -o test test.cpp -lcryptopp -lpthread
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP12StringSourceE[_ZTVN8CryptoPP12StringSourceE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP12StringSourceE[_ZTVN8CryptoPP12StringSourceE]+0x128): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP12StringSourceE[_ZTVN8CryptoPP12StringSourceE]+0x130): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long&, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP14SourceTemplateINS_11StringStoreEEE[_ZTVN8CryptoPP14SourceTemplateINS_11StringStoreEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP14SourceTemplateINS_11StringStoreEEE[_ZTVN8CryptoPP14SourceTemplateINS_11StringStoreEEE]+0x128): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP14SourceTemplateINS_11StringStoreEEE[_ZTVN8CryptoPP14SourceTemplateINS_11StringStoreEEE]+0x130): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long&, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP14InputRejectingINS_6FilterEEE[_ZTVN8CryptoPP14InputRejectingINS_6FilterEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP14InputRejectingINS_6FilterEEE[_ZTVN8CryptoPP14InputRejectingINS_6FilterEEE]+0x128): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP14InputRejectingINS_6FilterEEE[_ZTVN8CryptoPP14InputRejectingINS_6FilterEEE]+0x130): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long&, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x128): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP17SimpleProxyFilterE[_ZTVN8CryptoPP17SimpleProxyFilterE]+0x130): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long&, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP23CustomSignalPropagationINS_4SinkEEE[_ZTVN8CryptoPP23CustomSignalPropagationINS_4SinkEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP22CustomFlushPropagationINS_4SinkEEE[_ZTVN8CryptoPP22CustomFlushPropagationINS_4SinkEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x128): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP11UnflushableINS_6FilterEEE[_ZTVN8CryptoPP11UnflushableINS_6FilterEEE]+0x130): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long&, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x128): undefined reference to `CryptoPP::Filter::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP10BufferlessINS_6FilterEEE[_ZTVN8CryptoPP10BufferlessINS_6FilterEEE]+0x130): undefined reference to `CryptoPP::Filter::CopyRangeTo2(CryptoPP::BufferedTransformation&, unsigned long&, unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) const'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP4SinkE[_ZTVN8CryptoPP4SinkE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP13AutoSignalingINS_14InputRejectingINS_22BufferedTransformationEEEEE[_ZTVN8CryptoPP13AutoSignalingINS_14InputRejectingINS_22BufferedTransformationEEEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o:(.data.rel.ro._ZTVN8CryptoPP14InputRejectingINS_22BufferedTransformationEEE[_ZTVN8CryptoPP14InputRejectingINS_22BufferedTransformationEEE]+0xd8): undefined reference to `CryptoPP::BufferedTransformation::Skip(unsigned long)'
/usr/bin/ld: /tmp/ccZ6zru9.o: in function `CryptoPP::SourceTemplate<CryptoPP::StringStore>::Pump2(unsigned long&, bool)':
test.cpp:(.text._ZN8CryptoPP14SourceTemplateINS_11StringStoreEE5Pump2ERmb[_ZN8CryptoPP14SourceTemplateINS_11StringStoreEE5Pump2ERmb]+0x5b): undefined reference to `CryptoPP::StringStore::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
collect2: error: ld returned 1 exit status
Crypto++ Version:
elon#starlink:~/$ grep Library cryptopp/cryptlib.h
/*! \mainpage Crypto++ Library 8.5 API Reference
/// \details LibraryVersion can help detect inadvertent mixing and matching of library
. . .
g++ Version:
elon#starlink:~/$ gcc --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
Does anyone know why the program fails to compile?
I have tried your codes and it seems that you need to include the header file "cryptopp/filters.h", after that, bugs may be solved.
Context
I have pulled code from the concord repo at https://github.com/vmware/concord. I managed to build the docker images fine.
In the documentation at https://concord.readthedocs.io/en/latest/deployment/deployment.html#confguration-file-generator they mention a configuration file generator that is used to generate configuration files which is required to run a concord node using docker run (the command to run the concord node is defined at https://concord.readthedocs.io/en/latest/deployment/deployment.html#concord-nodes). This configuration file generator is a .cpp called conc_genconfig.cpp (available at https://github.com/vmware/concord/blob/master/tools/conc_genconfig.cpp) and requires a .yml as an input. This uses library files from log4cplus and boost. I installed these by looking at the Dockerfile under the builder folder (available at https://github.com/vmware/concord/blob/master/docker/dockerfiles/builder/Dockerfile)
Problem
When I compile conc_genconfig.cpp using the following command:
g++ -Wall -g -std=c++11 -LLIBDIR -I /home/ubuntu/concord/src -I /home/ubuntu/concord-bft/threshsign/include/threshsign conc_genconfig.cpp
I get the following output/compilation errors:
In file included from conc_genconfig.cpp:23:0:
/home/ubuntu/concord/src/config/configuration_manager.hpp:1547:23: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
kPositiveIntLimits({1, INT_MAX});
^
/home/ubuntu/concord/src/config/configuration_manager.hpp:1549:26: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
kPositiveUInt16Limits({1, UINT16_MAX});
^
/home/ubuntu/concord/src/config/configuration_manager.hpp:1551:26: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
kPositiveUInt64Limits({1, UINT64_MAX});
^
/home/ubuntu/concord/src/config/configuration_manager.hpp:1553:29: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
kPositiveULongLongLimits({1, ULLONG_MAX});
^
/home/ubuntu/concord/src/config/configuration_manager.hpp:1554:77: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
inline const std::pair<unsigned long long, unsigned long long> kUInt16Limits(
^
/home/ubuntu/concord/src/config/configuration_manager.hpp:1556:77: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
inline const std::pair<unsigned long long, unsigned long long> kUInt32Limits(
^
/home/ubuntu/concord/src/config/configuration_manager.hpp:1558:77: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
inline const std::pair<unsigned long long, unsigned long long> kUInt64Limits(
^
/home/ubuntu/concord/src/config/configuration_manager.hpp:1560:58: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
inline const std::pair<long long, long long> kInt32Limits({INT32_MIN,
^
/home/ubuntu/concord/src/config/configuration_manager.hpp:1566:45: warning: inline variables are only available with -std=c++1z or -std=gnu++1z
kConcordBFTCommunicationBufferSizeLimits({512, UINT32_MAX});
^
/tmp/cc2pIDGw.o: In function `main':
/home/ubuntu/concord/tools/conc_genconfig.cpp:44: undefined reference to `log4cplus::initialize()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:45: undefined reference to `log4cplus::Logger::getDefaultHierarchy()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:45: undefined reference to `log4cplus::BasicConfigurator::BasicConfigurator(log4cplus::Hierarchy&, bool)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:46: undefined reference to `log4cplus::PropertyConfigurator::configure()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:48: undefined reference to `log4cplus::Logger::getInstance(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:54: undefined reference to `boost::program_options::variables_map::variables_map()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:55: undefined reference to `boost::program_options::options_description::m_default_line_length'
/home/ubuntu/concord/tools/conc_genconfig.cpp:55: undefined reference to `boost::program_options::options_description::m_default_line_length'
/home/ubuntu/concord/tools/conc_genconfig.cpp:55: undefined reference to `boost::program_options::options_description::options_description(unsigned int, unsigned int)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:58: undefined reference to `boost::program_options::options_description::add_options()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:59: undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:63: undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:70: undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:71: undefined reference to `boost::program_options::options_description_easy_init::operator()(char const*, boost::program_options::value_semantic const*, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:85: undefined reference to `boost::program_options::store(boost::program_options::basic_parsed_options<char> const&, boost::program_options::variables_map&, bool)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:92: undefined reference to `boost::program_options::operator<<(std::ostream&, boost::program_options::options_description const&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:95: undefined reference to `boost::program_options::notify(boost::program_options::variables_map&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:97: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:97: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:97: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:100: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:100: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:100: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:108: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:108: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:108: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:114: undefined reference to `concord::config::YAMLConfigurationInput::YAMLConfigurationInput(std::istream&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:116: undefined reference to `concord::config::YAMLConfigurationInput::parseInput()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:129: undefined reference to `concord::config::ConcordConfiguration::ConcordConfiguration()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:130: undefined reference to `concord::config::specifyConfiguration(concord::config::ConcordConfiguration&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:131: undefined reference to `concord::config::ConcordConfiguration::setConfigurationStateLabel(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:134: undefined reference to `concord::config::loadClusterSizeParameters(concord::config::YAMLConfigurationInput&, concord::config::ConcordConfiguration&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:141: undefined reference to `concord::config::instantiateTemplatedConfiguration(concord::config::YAMLConfigurationInput&, concord::config::ConcordConfiguration&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:150: undefined reference to `concord::config::loadConfigurationInputParameters(concord::config::YAMLConfigurationInput&, concord::config::ConcordConfiguration&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:156: undefined reference to `concord::config::ConcordConfiguration::loadAllDefaults(bool, bool)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:158: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:158: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:158: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:164: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:164: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:164: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:167: undefined reference to `concord::config::generateConfigurationKeys(concord::config::ConcordConfiguration&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:168: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:168: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:168: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:177: undefined reference to `concord::config::ConcordConfiguration::generateAll(bool, bool)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:179: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:179: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:179: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:185: undefined reference to `concord::config::ConcordConfiguration::scopeIsInstantiated(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:186: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:186: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:186: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:192: undefined reference to `concord::config::ConcordConfiguration::validateAll(bool, bool)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:194: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:194: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:194: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:199: undefined reference to `concord::config::hasAllParametersRequiredAtConfigurationGeneration(concord::config::ConcordConfiguration&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:200: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:200: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:200: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:205: undefined reference to `concord::config::ConcordConfiguration::scopeSize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:210: undefined reference to `concord::config::YAMLConfigurationOutput::YAMLConfigurationOutput(std::ostream&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:212: undefined reference to `concord::config::outputConcordNodeConfiguration(concord::config::ConcordConfiguration const&, concord::config::YAMLConfigurationOutput&, unsigned long)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:222: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:222: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:222: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:222: undefined reference to `concord::config::YAMLConfigurationOutput::~YAMLConfigurationOutput()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:231: undefined reference to `concord::config::outputPrincipalLocationsMappingJSON(concord::config::ConcordConfiguration&, std::ostream&)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:241: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:241: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:241: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:129: undefined reference to `concord::config::ConcordConfiguration::~ConcordConfiguration()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:114: undefined reference to `concord::config::YAMLConfigurationInput::~YAMLConfigurationInput()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:48: undefined reference to `log4cplus::Logger::~Logger()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:45: undefined reference to `log4cplus::BasicConfigurator::~BasicConfigurator()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:118: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:118: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:118: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:124: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:124: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:124: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:136: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:136: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:136: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:143: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:143: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:143: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:152: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:152: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:152: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:170: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:170: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:170: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:173: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:173: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:173: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:214: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:214: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:214: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:218: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:218: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:218: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:210: undefined reference to `concord::config::YAMLConfigurationOutput::~YAMLConfigurationOutput()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:233: undefined reference to `log4cplus::Logger::isEnabledFor(int) const'
/home/ubuntu/concord/tools/conc_genconfig.cpp:233: undefined reference to `log4cplus::detail::get_macro_body_oss[abi:cxx11]()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:233: undefined reference to `log4cplus::detail::macro_forced_log(log4cplus::Logger const&, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*, int, char const*)'
/home/ubuntu/concord/tools/conc_genconfig.cpp:129: undefined reference to `concord::config::ConcordConfiguration::~ConcordConfiguration()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:114: undefined reference to `concord::config::YAMLConfigurationInput::~YAMLConfigurationInput()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:48: undefined reference to `log4cplus::Logger::~Logger()'
/home/ubuntu/concord/tools/conc_genconfig.cpp:45: undefined reference to `log4cplus::BasicConfigurator::~BasicConfigurator()'
/tmp/cc2pIDGw.o: In function `boost::program_options::value_semantic_codecvt_helper<char>::value_semantic_codecvt_helper()':
/usr/include/boost/program_options/value_semantic.hpp:91: undefined reference to `vtable for boost::program_options::value_semantic_codecvt_helper<char>'
/tmp/cc2pIDGw.o: In function `boost::program_options::value_semantic_codecvt_helper<char>::~value_semantic_codecvt_helper()':
/usr/include/boost/program_options/value_semantic.hpp:91: undefined reference to `vtable for boost::program_options::value_semantic_codecvt_helper<char>'
/tmp/cc2pIDGw.o: In function `boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char const* const*)':
/usr/include/boost/program_options/detail/parsers.hpp:44: undefined reference to `boost::program_options::detail::cmdline::cmdline(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
/tmp/cc2pIDGw.o: In function `boost::program_options::basic_command_line_parser<char>::options(boost::program_options::options_description const&)':
/usr/include/boost/program_options/detail/parsers.hpp:52: undefined reference to `boost::program_options::detail::cmdline::set_options_description(boost::program_options::options_description const&)'
/tmp/cc2pIDGw.o: In function `boost::program_options::basic_command_line_parser<char>::run()':
/usr/include/boost/program_options/detail/parsers.hpp:108: undefined reference to `boost::program_options::detail::cmdline::get_canonical_option_prefix()'
/usr/include/boost/program_options/detail/parsers.hpp:109: undefined reference to `boost::program_options::detail::cmdline::run()'
/tmp/cc2pIDGw.o: In function `std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > boost::program_options::to_internal<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)':
/usr/include/boost/program_options/detail/convert.hpp:79: undefined reference to `boost::program_options::to_internal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/tmp/cc2pIDGw.o:(.data.rel.ro._ZTVN5boost15program_options11typed_valueINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEE[_ZTVN5boost15program_options11typed_valueINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEE]+0x38): undefined reference to `boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const'
/tmp/cc2pIDGw.o:(.data.rel.ro._ZTIN5boost15program_options11typed_valueINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEE[_ZTIN5boost15program_options11typed_valueINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEcEE]+0x18): undefined reference to `typeinfo for boost::program_options::value_semantic_codecvt_helper<char>'
/tmp/cc2pIDGw.o: In function `boost::program_options::variables_map::~variables_map()':
/usr/include/boost/program_options/variables_map.hpp:146: undefined reference to `vtable for boost::program_options::variables_map'
/tmp/cc2pIDGw.o: In function `boost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::name() const':
/usr/include/boost/program_options/detail/value_semantic.hpp:22: undefined reference to `boost::program_options::arg[abi:cxx11]'
/tmp/cc2pIDGw.o: In function `boost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::xparse(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const':
/usr/include/boost/program_options/detail/value_semantic.hpp:184: undefined reference to `boost::program_options::validate(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, int)'
collect2: error: ld returned 1 exit status
Versions and OS
I am using: Ubuntu 18.04.3 LTS
gcc version: gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
g++ version: g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
libboost version: Version: 1.65.1.0ubuntu1
Environment variables
I have set LD_LIBRARY_PATH to /usr/local/lib. This is where log4cplus libraries have been built.
I apologise if this question is not clear. Please let me know if that is the case so I can improve my question. If anyone can, please add the tag 'concord' to the question.
I have some problem with compile correct application in fresh-installed Clion IDE. Earlier I used Code::Blocks and all compiling successfully. Project use pthread and Crypto++ library. I'm already have them installed on my Ubuntu 15.04. And compile Clion project with -pthread flag. But it can't find crypto++ library. How to fix this?
My CMake file:
cmake_minimum_required(VERSION 3.3)
project(Chat)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
set(SOURCE_FILES
include/Chat.h
include/Checker.h
include/Client.h
include/DataTransferingInterface.h
include/EncryptorDES.h
include/EncryptorRSA.h
include/Logger.h
include/OwnerClientInterface.h
include/OwnerServerInterface.h
include/Parser.h
include/SecureChat.h
include/Server.h
src/Chat.cpp
src/Checker.cpp
src/Client.cpp
src/DataTransferingInterface.cpp
src/EncryptorDES.cpp
src/EncryptorRSA.cpp
src/Logger.cpp
src/OwnerClientInterface.cpp
src/OwnerServerInterface.cpp
src/Parser.cpp
src/SecureChat.cpp
src/Server.cpp
main.cpp)
add_executable(Chat ${SOURCE_FILES})
Compile errors:
/usr/include/cryptopp/integer.h:26: undefined reference to `vtable for CryptoPP::Integer'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::AbstractRing<CryptoPP::Integer>::MultiplicativeGroupT::~MultiplicativeGroupT()':
/usr/include/cryptopp/algebra.h:70: undefined reference to `vtable for CryptoPP::AbstractRing<CryptoPP::Integer>::MultiplicativeGroupT'
/usr/include/cryptopp/algebra.h:70: undefined reference to `CryptoPP::AbstractGroup<CryptoPP::Integer>::~AbstractGroup()'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::FileStore::~FileStore()':
/usr/include/cryptopp/files.h:14: undefined reference to `vtable for CryptoPP::FileStore'
/usr/include/cryptopp/files.h:14: undefined reference to `vtable for CryptoPP::FileStore'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::FileSink::~FileSink()':
/usr/include/cryptopp/files.h:77: undefined reference to `vtable for CryptoPP::FileSink'
/usr/include/cryptopp/files.h:77: undefined reference to `vtable for CryptoPP::FileSink'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::HMAC_Base::~HMAC_Base()':
/usr/include/cryptopp/hmac.h:12: undefined reference to `vtable for CryptoPP::HMAC_Base'
/usr/include/cryptopp/hmac.h:12: undefined reference to `vtable for CryptoPP::HMAC_Base'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::AlgorithmParametersTemplate<char const*>::AssignValue(char const*, std::type_info const&, void*) const':
/usr/include/cryptopp/algparam.h:313: undefined reference to `CryptoPP::g_pAssignIntToInteger'
/usr/include/cryptopp/algparam.h:313: undefined reference to `CryptoPP::g_pAssignIntToInteger'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::DL_EncryptorBase<CryptoPP::ECPPoint>::Encrypt(CryptoPP::RandomNumberGenerator&, unsigned char const*, unsigned long, unsigned char*, CryptoPP::NameValuePairs const&) const':
/usr/include/cryptopp/integer.h:118: undefined reference to `CryptoPP::Integer::One()'
/usr/include/cryptopp/integer.h:118: undefined reference to `CryptoPP::Integer::Zero()'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::DL_EncryptorBase<CryptoPP::ECPPoint>::Encrypt(CryptoPP::RandomNumberGenerator&, unsigned char const*, unsigned long, unsigned char*, CryptoPP::NameValuePairs const&) const':
/usr/include/cryptopp/pubkey.h:1228: undefined reference to `CryptoPP::Integer::One()'
/usr/include/cryptopp/pubkey.h:1228: undefined reference to `CryptoPP::Integer::Integer(CryptoPP::RandomNumberGenerator&, CryptoPP::Integer const&, CryptoPP::Integer const&, CryptoPP::Integer::RandomNumberType, CryptoPP::Integer const&, CryptoPP::Integer const&)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::SourceTemplate<CryptoPP::FileStore>::Pump2(unsigned long long&, bool)':
/usr/include/cryptopp/filters.h:763: undefined reference to `CryptoPP::DEFAULT_CHANNEL'
/usr/include/cryptopp/filters.h:763: undefined reference to `CryptoPP::FileStore::TransferTo2(CryptoPP::BufferedTransformation&, unsigned long long&, std::string const&, bool)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::SourceTemplate<CryptoPP::FileStore>::PumpMessages2(unsigned int&, bool)':
/usr/include/cryptopp/filters.h:765: undefined reference to `CryptoPP::DEFAULT_CHANNEL'
/usr/include/cryptopp/filters.h:765: undefined reference to `CryptoPP::BufferedTransformation::TransferMessagesTo2(CryptoPP::BufferedTransformation&, unsigned int&, std::string const&, bool)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::SourceTemplate<CryptoPP::FileStore>::PumpAll2(bool)':
/usr/include/cryptopp/filters.h:767: undefined reference to `CryptoPP::DEFAULT_CHANNEL'
/usr/include/cryptopp/filters.h:767: undefined reference to `CryptoPP::BufferedTransformation::TransferAllTo2(CryptoPP::BufferedTransformation&, std::string const&, bool)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::SourceTemplate<CryptoPP::FileStore>::SourceExhausted() const':
/usr/include/cryptopp/filters.h:769: undefined reference to `CryptoPP::BufferedTransformation::AnyRetrievable() const'
/usr/include/cryptopp/filters.h:769: undefined reference to `CryptoPP::BufferedTransformation::AnyMessages() const'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::DL_EncryptionAlgorithm_Xor<CryptoPP::HMAC<CryptoPP::SHA1>, false>::SymmetricEncrypt(CryptoPP::RandomNumberGenerator&, unsigned char const*, unsigned char const*, unsigned long, unsigned char*, CryptoPP::NameValuePairs const&) const':
/usr/include/cryptopp/gfpcrypt.h:439: undefined reference to `CryptoPP::xorbuf(unsigned char*, unsigned char const*, unsigned char const*, unsigned long)'
/usr/include/cryptopp/gfpcrypt.h:441: undefined reference to `CryptoPP::HMAC_Base::Update(unsigned char const*, unsigned long)'
/usr/include/cryptopp/gfpcrypt.h:442: undefined reference to `CryptoPP::HMAC_Base::Update(unsigned char const*, unsigned long)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::DL_EncryptionAlgorithm_Xor<CryptoPP::HMAC<CryptoPP::SHA1>, false>::SymmetricDecrypt(unsigned char const*, unsigned char const*, unsigned long, unsigned char*, CryptoPP::NameValuePairs const&) const':
/usr/include/cryptopp/gfpcrypt.h:470: undefined reference to `CryptoPP::HMAC_Base::Update(unsigned char const*, unsigned long)'
/usr/include/cryptopp/gfpcrypt.h:471: undefined reference to `CryptoPP::HMAC_Base::Update(unsigned char const*, unsigned long)'
/usr/include/cryptopp/gfpcrypt.h:481: undefined reference to `CryptoPP::xorbuf(unsigned char*, unsigned char const*, unsigned char const*, unsigned long)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::DL_KeyAgreementAlgorithm_DH<CryptoPP::ECPPoint, CryptoPP::EnumToType<CryptoPP::CofactorMultiplicationOption, 0> >::AgreeWithEphemeralPrivateKey(CryptoPP::DL_GroupParameters<CryptoPP::ECPPoint> const&, CryptoPP::DL_FixedBasePrecomputation<CryptoPP::ECPPoint> const&, CryptoPP::Integer const&) const':
/usr/include/cryptopp/pubkey.h:1445: undefined reference to `CryptoPP::Integer::Integer(CryptoPP::Integer const&)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::DL_KeyAgreementAlgorithm_DH<CryptoPP::ECPPoint, CryptoPP::EnumToType<CryptoPP::CofactorMultiplicationOption, 0> >::AgreeWithStaticPrivateKey(CryptoPP::DL_GroupParameters<CryptoPP::ECPPoint> const&, CryptoPP::ECPPoint const&, bool, CryptoPP::Integer const&) const':
/usr/include/cryptopp/pubkey.h:1473: undefined reference to `CryptoPP::Integer::Integer(CryptoPP::Integer const&)'
/usr/include/cryptopp/pubkey.h:1473: undefined reference to `CryptoPP::Integer::Integer(CryptoPP::Integer const&)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::HMAC<CryptoPP::SHA1>::HMAC(unsigned char const*, unsigned long)':
/usr/include/cryptopp/hmac.h:48: undefined reference to `CryptoPP::g_nullNameValuePairs'
/usr/include/cryptopp/hmac.h:48: undefined reference to `CryptoPP::SimpleKeyingInterface::SetKey(unsigned char const*, unsigned long, CryptoPP::NameValuePairs const&)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::P1363_KDF2<CryptoPP::SHA1>::DeriveKey(unsigned char*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long)':
/usr/include/cryptopp/pubkey.h:506: undefined reference to `CryptoPP::P1363_MGF1KDF2_Common(CryptoPP::HashTransformation&, unsigned char*, unsigned long, unsigned char const*, unsigned long, unsigned char const*, unsigned long, bool, unsigned int)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u, false>::Init()':
/usr/include/cryptopp/iterhash.h:90: undefined reference to `CryptoPP::SHA1::InitState(unsigned int*)'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o:(.rodata._ZTIN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE[_ZTIN8CryptoPP16IteratedHashBaseIjNS_18HashTransformationEEE]+0x10): undefined reference to `typeinfo for CryptoPP::HashTransformation'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o:(.rodata._ZTIN8CryptoPP25SimpleKeyingInterfaceImplINS_9HMAC_BaseENS_4HMACINS_4SHA1EEEEE[_ZTIN8CryptoPP25SimpleKeyingInterfaceImplINS_9HMAC_BaseENS_4HMACINS_4SHA1EEEEE]+0x10): undefined reference to `typeinfo for CryptoPP::HMAC_Base'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::HashTransformation::HashTransformation(CryptoPP::HashTransformation const&)':
/usr/include/cryptopp/cryptlib.h:531: undefined reference to `vtable for CryptoPP::HashTransformation'
CMakeFiles/Chat.dir/src/EncryptorRSA.cpp.o: In function `CryptoPP::IteratedHashWithStaticTransform<unsigned int, CryptoPP::EnumToType<CryptoPP::ByteOrder, 1>, 64u, 20u, CryptoPP::SHA1, 0u, false>::HashEndianCorrectedBlock(unsigned int const*)':
/usr/include/cryptopp/iterhash.h:89: undefined reference to `CryptoPP::SHA1::Transform(unsigned int*, unsigned int const*)'
collect2: error: ld returned 1 exit status
CMakeFiles/Chat.dir/build.make:406: recipe for target 'Chat' failed
make[2]: *** [Chat] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/Chat.dir/all' failed
make[1]: *** [CMakeFiles/Chat.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
I performed the following after add_executable in my CMakeLists.txt to resolve the issue:
target_link_libraries(Chat /usr/lib/libcrypto++.a)