mysql++ compile example Linux Ubuntu 32-bit (a.k.a. example of linking libraries, makefile, headers for C++)
This is more of an exercise in linking libraries and Makefiles than something specific to mysql++, but since I didn't know how to do it before, here goes:
To compile one of the mysql++ examples on my system, I had to specify where the header files were for both the mysqlclient, which I had installed with the apt package manager (see this post), and for mysql++, which I had compiled from source (again, see this post). I also had to specify where the shared object libraries were. The -I option contains the include paths, the -L option contains the shared object paths, and the -l option contains the names of the .so files (excluding the lib and .so component; e.g. -lmysqlpp looks for libmysqlpp.so). On my system, this worked for compilation:
I have 4 to start with:
The main file, stacksToVCF.cpp containing:
To compile one of the mysql++ examples on my system, I had to specify where the header files were for both the mysqlclient, which I had installed with the apt package manager (see this post), and for mysql++, which I had compiled from source (again, see this post). I also had to specify where the shared object libraries were. The -I option contains the include paths, the -L option contains the shared object paths, and the -l option contains the names of the .so files (excluding the lib and .so component; e.g. -lmysqlpp looks for libmysqlpp.so). On my system, this worked for compilation:
g++ simple1.cpp -I/usr/include/mysql -I/usr/local/include/mysql++ -L/usr/local/lib -L/usr/lib/i386-linux-gnu -lmysqlpp -lmysqlclient -o simple1And at runtime, the .so files are searched for, so their location needs to be specified. The libmysqlclient.so was installed by the package manager into /usr/lib/i386-linux-gnu and the libmysqlpp.so was installed to /usr/local/lib by default. I ran this and also appended this to my .bashrc file.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/i386-linux-gnu:/usr/local/libOnce that was working, I moved over to my code. My goal is to learn how to interact with a MySQL database using C++. First I needed to get some basics down, which was simply compiling multiple files since I've evidently forgotten the small amount I knew about C++.
I have 4 to start with:
The main file, stacksToVCF.cpp containing:
#include <stdlib.h> #include <iostream> #include "stacksDB.h" int main ( int argc, char *argv[] ) { testcon(argc, argv); std::cout << "Hello from main" << std::endl; return EXIT_SUCCESS; }stacksDB.h containing
#ifndef STACKSDB_H_INC #define STACKSDB_H_INC int testcon(int argc, char *argv[]); #endifstacksDB.cpp containing
#include <stdlib.h> #include <iostream> #include <mysql++.h> #include "stacksDB.h" int testcon (int argc, char *argv[]) { mysqlpp::String greeting("Hello from mysqlpp"); std::cout << greeting << std::endl; return EXIT_SUCCESS; }and the Makefile, containing:
CXXFLAGS := -I/usr/include/mysql -I/usr/local/include/mysql++ LDFLAGS := -L/usr/local/lib -L/usr/lib/i386-linux-gnu LDLIBS := -lmysqlpp -lmysqlclient EXECUTABLE := stacksToVCF all: $(EXECUTABLE) stacksToVCF: stacksToVCF.o stacksDB.o g++ stacksToVCF.o stacksDB.o $(CXXFLAGS) $(LDFLAGS) $(LDLIBS) -o $(EXECUTABLE) stacksToVCF.o: stacksToVCF.cpp g++ -c stacksToVCF.cpp stacksDB.o: stacksDB.cpp g++ -c stacksDB.cpp $(CXXFLAGS) $(LDFLAGS) $(LDLIBS) clean: rm -rf *o $(EXECUTABLE)This compiles successfully with make and will be the starting point.
Comments
Post a Comment