I’ve been trying to resolve a serious memory leak in my C++ application. I’ve narrowed it down to the creation of MySQL connections and the mysqlpp doc (plus lots of googling) indicates that I need to call mysql_library_end() to tell the C API to clean up after itself.
When I try to use this function, Visual Studio throws a Link error for “mysql_library_end()”. Fair enough, I didn’t tell it where to look.
When I include the header file mysql.h and rebuild, Visual Studio then throws a Link error for “mysql_server_end()” instead. I checked mysql.h (in my build environment) and the only reference to the function I want to use ( mysql_library_end() ) is:
#define mysql_library_end mysql_server_end
There is a function declaration for mysql_server_end() in the file but Visual Studio can’t seem to see it. I’m just stuck with this Linker error and I have no idea why it is happening.
Can anyone help?
Cheers,
Adam.
EDIT
I’m using Visual Studio 2005.Error message from the IDE is:
Error 6 error LNK2019: unresolved external symbol _mysql_server_end@0 referenced in function “public: __thiscall CConnectionParams::~CConnectionParams(void)” (??1CConnectionParams@@QAE@XZ) CConnectionParams.obj
Where CConnectionParams is the .cpp file of the call to mysql_library_end().
Found the solution. The header file on it’s own isn’t enough, the whole library needs to be linked in. There are two libraries that can be used to interface the MySQL C API: libmysql.lib and mysqlclient.lib. One is static, one is dynamic. The one that worked for me was libmysql.lib. Note that I therefore didn’t need to #include mysql.h as a result.
To link this library in Visual studio you just need to include it as part of your project dependencies. I dragged it into the solution tree from it’s directory, the mysql install, but this is not a very elegant method because it only works for VS and not other build environments.