I am new to C++ and unable to compile a C++ program written by someone else as I can't seem to link the libraries and binaries properly. I have the libraries in the same folder. Given the errors below and the structure of those directories, can anyone please tell me how to link them to remove these errors? One example of every kind of issues (binary libraries, include files) will be enough. Thanks so much in advance!
Here is the command so far that links 'curl', 'perl' and 'mysql' libraries:
g++ -o myscript myscript.cpp -Iexternal/rapidjson/include -Iexternal/tinyxml2/tinyxml2/ -Iexternal/InterOp-1.1.4-Linux-GNU/include/ -I/usr/include/mysql/ -I/usr/lib64/perl5/CORE/ -Iexternal/myhtml/source/ 'mysql_config --cflags --libs' -lcurl -Wl,-E -Wl,-rpath,/usr/lib64/perl5/CORE -fstack-protector -L/usr/lib64/perl5/CORE -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib64/perl5/CORE -Lexternal/tinyxml2/tinyxml2/ -Lexternal/myhtml/lib -Iexternal/myhtml/lib/
These are the errors it gives. Clearly, it can not find 'my_html', 'tinyxml' and 'InterOp-1.1.4-Linux-GNU' libraries/binaries.
/tmp/ccYPh2OS.o: In function
'html::print_node_attr(myhtml_tree_node*)':
current_dir/myscript.cpp:1323: undefined reference to 'myhtml_node_attribute_first'
current_dir/myscript.cpp:1326: undefined reference to 'myhtml_attribute_key'
current_dir/myscript.cpp:1329: undefined reference to 'myhtml_attribute_value'
current_dir/myscript.cpp:1333: undefined reference to 'myhtml_attribute_next'
/tmp/ccYPh2OS.o: In function 'html::print_tree2(myhtml_tree*, myhtml_tree_node*, unsigned long, std::vector<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::allocator<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >&)':
current_dir/myscript.cpp:1341: undefined reference to 'myhtml_node_tag_id'
current_dir/myscript.cpp:1343: undefined reference to 'myhtml_node_text'
current_dir/myscript.cpp:1348: undefined reference to 'myhtml_node_tag_id'
current_dir/myscript.cpp:1350: undefined reference to 'myhtml_node_tag_id'
current_dir/myscript.cpp:1351: undefined reference to 'myhtml_node_text'
current_dir/myscript.cpp:1352: undefined reference to 'myhtml_node_next'
current_dir/myscript.cpp:1372: undefined reference to 'myhtml_node_tag_id'
current_dir/myscript.cpp:1372: undefined reference to 'myhtml_node_tag_id'
current_dir/myscript.cpp:1373: undefined reference to 'myhtml_node_text'
current_dir/myscript.cpp:1376: undefined reference to 'myhtml_node_next'
current_dir/myscript.cpp:1395: undefined reference to 'myhtml_node_child'
current_dir/myscript.cpp:1396: undefined reference to 'myhtml_node_next'
/tmp/ccYPh2OS.o: In function 'html::get_named_rows_from_fc_summary(std::vector<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::allocator<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >&, char const*)':
current_dir/myscript.cpp:1403: undefined reference to 'myhtml_create'
current_dir/myscript.cpp:1404: undefined reference to 'myhtml_init'
current_dir/myscript.cpp:1406: undefined reference to 'myhtml_tree_create'
current_dir/myscript.cpp:1407: undefined reference to 'myhtml_tree_init'
current_dir/myscript.cpp:1409: undefined reference to 'myhtml_parse'
current_dir/myscript.cpp:1411: undefined reference to 'myhtml_tree_get_document'
current_dir/myscript.cpp:1412: undefined reference to 'myhtml_node_child'
current_dir/myscript.cpp:1414: undefined reference to 'myhtml_tree_destroy'
current_dir/myscript.cpp:1415: undefined reference to 'myhtml_destroy'
/tmp/ccYPh2OS.o: In function 'update_fc_table(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tinyxml2::XMLElement*&)':
current_dir/myscript.cpp:1598: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:1598: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:1610: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:1610: undefined reference to 'tinyxml2::XMLElement::GetText() const'
/tmp/ccYPh2OS.o: In function 'interop_bits(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::allocator<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >&)':
current_dir/myscript.cpp:1636: undefined reference to 'illumina::interop::logic::utils::list_summary_metrics_to_load(std::vector<unsigned char, std::allocator<unsigned char> >&, illumina::interop::constants::instrument_type)'
current_dir/myscript.cpp:1637: undefined reference to 'illumina::interop::model::metrics::run_metrics::read(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> > const&, unsigned long, bool)'
current_dir/myscript.cpp:1642: undefined reference to 'illumina::interop::logic::summary::summarize_run_metrics(illumina::interop::model::metrics::run_metrics&, illumina::interop::model::summary::run_summary&, bool, bool)'
current_dir/myscript.cpp:1693: undefined reference to 'tinyxml2::XMLDocument::XMLDocument(bool, tinyxml2::Whitespace)'
current_dir/myscript.cpp:1695: undefined reference to 'tinyxml2::XMLDocument::LoadFile(char const*)'
current_dir/myscript.cpp:1749: undefined reference to 'tinyxml2::XMLDocument::~XMLDocument()'
current_dir/myscript.cpp:1749: undefined reference to 'tinyxml2::XMLDocument::~XMLDocument()'
/tmp/ccYPh2OS.o: In function 'write_sample_sheet(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::allocator<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >&, tinyxml2::XMLElement*&, std::vector<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::allocator<std::map<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >&, bool)':
current_dir/myscript.cpp:1769: undefined reference to 'tinyxml2::XMLElement::GetText() const'
/tmp/ccYPh2OS.o: In function 'print_info(tinyxml2::XMLElement*&)':
current_dir/myscript.cpp:1807: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:1808: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:1809: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:1810: undefined reference to 'tinyxml2::XMLElement::GetText() const'
/tmp/ccYPh2OS.o:current_dir/myscript.cpp:1811: more undefined references to 'tinyxml2::XMLElement::GetText() const' follow
/tmp/ccYPh2OS.o: In function 'bcl(int, char**)':
current_dir/myscript.cpp:2506: undefined reference to 'tinyxml2::XMLDocument::XMLDocument(bool, tinyxml2::Whitespace)'
current_dir/myscript.cpp:2507: undefined reference to 'tinyxml2::XMLDocument::LoadFile(char const*)'
current_dir/myscript.cpp:2525: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:2525: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:2525: undefined reference to 'tinyxml2::XMLElement::GetText() const'
current_dir/myscript.cpp:2614: undefined reference to 'tinyxml2::XMLDocument::~XMLDocument()'
current_dir/myscript.cpp:2614: undefined reference to 'tinyxml2::XMLDocument::~XMLDocument()'
/tmp/ccYPh2OS.o: In function 'tinyxml2::XMLNode::FirstChildElement(char const*)':
current_dir/external/tinyxml2/tinyxml2/tinyxml2.h:777: undefined reference to 'tinyxml2::XMLNode::FirstChildElement(char const*) const'
/tmp/ccYPh2OS.o: In function 'illumina::interop::io::paths::interop_filename(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)':
current_dir/external/InterOp-1.1.4-Linux-GNU/include/interop/io/paths.h:140: undefined reference to 'illumina::interop::io::basename(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
current_dir/external/InterOp-1.1.4-Linux-GNU/include/interop/io/paths.h:142: undefined reference to 'illumina::interop::io::basename(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
current_dir/external/InterOp-1.1.4-Linux-GNU/include/interop/io/paths.h:143: undefined reference to 'illumina::interop::io::combine(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
current_dir/external/InterOp-1.1.4-Linux-GNU/include/interop/io/paths.h:144: undefined reference to 'illumina::interop::io::combine(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/tmp/ccYPh2OS.o: In function 'illumina::interop::io::paths::interop_directory_name(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
current_dir/external/InterOp-1.1.4-Linux-GNU/include/interop/io/paths.h:153: undefined reference to 'illumina::interop::io::combine(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/tmp/ccYPh2OS.o: In function 'void illumina::interop::io::read_interop<illumina::interop::model::metric_base::metric_set<illumina::interop::model::metrics::tile_metric> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, illumina::interop::model::metric_base::metric_set<illumina::interop::model::metrics::tile_metric>&, bool)':
current_dir/external/InterOp-1.1.4-Linux-GNU/include/interop/io/metric_file_stream.h:150: undefined reference to 'illumina::interop::io::file_size(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/tmp/ccYPh2OS.o: In function 'illumina::interop::io::metric_format_factory<illumina::interop::model::metrics::tile_metric>::metric_formats()':
current_dir/external/InterOp-1.1.4-Linux-GNU/include/interop/io/format/metric_format_factory.h:78: undefined reference to 'illumina::interop::io::force_link_metric_format(illumina::interop::model::metrics::tile_metric*)'
All these 3 libraries are in external folder.
ls -l external/
drwx--S--- 6 pipe pipe 4096 Nov 1 16:13 InterOp-1.1.4-Linux-GNU
drwx--S--- 13 pipe pipe 4096 Nov 1 16:13 myhtml
drwxrws--- 12 pipe pipe 4096 Nov 1 16:13 rapidjson
drwx--S--- 4 pipe pipe 4096 Nov 1 16:12 tinyxml2
ls -l external/InterOp-1.1.4-Linux-GNU/
drwxr-sr-x 2 pipe pipe 4096 Nov 1 16:12 bin
-rw-r--r-- 1 pipe pipe 15595 Nov 1 16:12 changes.md
drwxr-sr-x 3 pipe pipe 4096 Nov 1 16:13 include
drwxr-sr-x 3 pipe pipe 4096 Nov 1 16:12 lib64
-rw-r--r-- 1 pipe pipe 5585 Nov 1 16:12 README.md
drwxr-sr-x 3 pipe pipe 4096 Nov 1 16:12 share
ls -l external/myhtml/
-rwxr-xr-x 1 pipe pipe 1849356 Nov 1 16:13 a.out
-rw-r--r-- 1 pipe pipe 8486 Nov 1 16:13 api_breaking_changes.md
drwxr-sr-x 3 pipe pipe 4096 Nov 1 16:13 bin
-rw-r--r-- 1 pipe pipe 10198 Nov 1 16:13 CHANGELOG.md
-rw-r--r-- 1 pipe pipe 8726 Nov 1 16:13 CMakeLists.txt
drwxr-sr-x 3 pipe pipe 4096 Nov 1 16:13 debian
drwxr-sr-x 3 pipe pipe 4096 Nov 1 16:13 devel
drwxr-sr-x 3 pipe pipe 4096 Nov 1 16:13 examples
drwxr-sr-x 5 pipe pipe 4096 Nov 1 16:13 include
-rw-r--r-- 1 pipe pipe 1724 Nov 1 16:13 INSTALL.md
drwxr-sr-x 2 pipe pipe 4096 Nov 1 16:13 lib
-rw-r--r-- 1 pipe pipe 24477 Nov 1 16:13 LICENSE
-rw-r--r-- 1 pipe pipe 8137 Nov 1 16:13 Makefile
-rw-r--r-- 1 pipe pipe 1275 Nov 1 16:13 Makefile.bin.cfg
-rw-r--r-- 1 pipe pipe 4717 Nov 1 16:13 Makefile.cfg
-rw-r--r-- 1 pipe pipe 279 Nov 1 16:13 myhtml.pc
-rw-r--r-- 1 pipe pipe 212 Nov 1 16:13 myhtml.pc.in
-rw-r--r-- 1 pipe pipe 6210 Nov 1 16:13 README.md
drwxr-sr-x 2 pipe pipe 4096 Nov 1 16:13 rpm
drwxr-sr-x 6 pipe pipe 4096 Nov 1 16:13 source
drwxr-sr-x 2 pipe pipe 4096 Nov 1 16:13 test
drwxr-sr-x 2 pipe pipe 4096 Nov 1 16:13 test_suite
ls -l external/tinyxml2/
-rwxr-x--- 1 pipe pipe 98466 Nov 1 16:12 a.out
drwxrws--- 5 pipe pipe 4096 Nov 1 16:12 build
-rwxr-x--- 1 pipe pipe 1131 Nov 1 16:12 tinytest.cpp
drwxrws--- 7 pipe pipe 4096 Nov 1 16:12 tinyxml2