Trying to statically link MYSQL library in C++ without any luck

Viewed 67

I'm stuck on this issue and I don't think it should be this difficult. I'm essentially getting a compilation error with several 'undefined reference' warnings which are, I believe, caused by the library not being properly linked to the project.

The library resources along with the required header files are all located in the include folder of my project as well as in the include path. (For reference, I'm working inside of VScode).

Here's part of my makefile


MYSQL_CONCPP_DIR = /home/me/Git/CppProject/include/cpp-connector-mysql
UTILS_DIR = /home/me/Git/CppProject/include/utils/
CPPFLAGS = -DSTATIC_CONCPP -I $(UTILS_DIR) 
LDLIBS = $(MYSQL_CONCPP_DIR)/lib64/libmysqlcppconn8-static.a -I $(UTILS_DIR) -lssl -lcrypto -lpthread
CXXFLAGS    := -std=c++17 -Wall -Wextra -g

I started moving towards C++ development maybe a week ago and have been programming for maybe half a year. So, if there is something obvious that I am missing I would not mind being embarrassed on Stack Overflow, as long as I learn something.

I've scoured the internet to find a solution and nothing has worked. I successfully did the exact same thing I'm trying to do (connect to localhost via a User class and a Connector class) in both Java and Python in a few hours, but am stuck on C++ with this issue.

Here's the actual error message I get, which is incredibly difficult to decipher:

/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o: in function `check_lib()':
/home/adis/Git/CppProject/include/cpp-connector-mysql/jdbc/cppconn/driver.h:77: undefined reference to `check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: /home/adis/Git/CppProject/include/cpp-connector-mysql/jdbc/cppconn/driver.h:78: undefined reference to `check(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<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&)'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o: in function `get_driver_instance_by_name':
/home/adis/Git/CppProject/include/cpp-connector-mysql/jdbc/cppconn/driver.h:90: undefined reference to `_get_driver_instance_by_name'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o: in function `mysqlx::abi2::r0::string::traits<char>::to_str[abi:cxx11](mysqlx::abi2::r0::string const&)':
/home/adis/Git/CppProject/include/cpp-connector-mysql/mysqlx/devapi/common.h:225: undefined reference to `mysqlx::abi2::r0::string::Impl::to_utf8[abi:cxx11](mysqlx::abi2::r0::string const&)'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o: in function `mysqlx::abi2::r0::DbDoc::DbDoc()':
/home/adis/Git/CppProject/include/cpp-connector-mysql/mysqlx/devapi/document.h:107: undefined reference to `vtable for mysqlx::abi2::r0::DbDoc'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o: in function `mysqlx::abi2::r0::DbDoc::~DbDoc()':
/home/adis/Git/CppProject/include/cpp-connector-mysql/mysqlx/devapi/document.h:81: undefined reference to `vtable for mysqlx::abi2::r0::DbDoc'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o: in function `mysqlx::abi2::r0::Value::print(std::ostream&) const':
/home/adis/Git/CppProject/include/cpp-connector-mysql/mysqlx/devapi/document.h:508: undefined reference to `mysqlx::abi2::r0::common::Value::print(std::ostream&) const'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o:(.data.rel.ro._ZTCN6mysqlx4abi22r05ValueE0_NS1_6common5ValueE[_ZTVN6mysqlx4abi22r05ValueE]+0x18): undefined reference to `typeinfo for mysqlx::abi2::r0::common::Value'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o:(.data.rel.ro._ZTCN6mysqlx4abi22r05ValueE0_NS1_6common5ValueE[_ZTVN6mysqlx4abi22r05ValueE]+0x20): undefined reference to `mysqlx::abi2::r0::common::Value::print(std::ostream&) const'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: src/Connector.o:(.data.rel.ro._ZTIN6mysqlx4abi22r05ValueE[_ZTIN6mysqlx4abi22r05ValueE]+0x28): undefined reference to `typeinfo for mysqlx::abi2::r0::common::Value'
/usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: error: ld returned 1 exit status
make: *** [Makefile:76: main] Error 1
0 Answers
Related