1

我一直在尝试解决我的 C++ 应用程序中的严重内存泄漏问题。我已将其范围缩小到 MySQL 连接的创建,并且 mysqlpp 文档(加上大量谷歌搜索)表明我需要调用 mysql_library_end() 来告诉 C API 自行清理。

当我尝试使用此函数时,Visual Studio 会为“mysql_library_end()”引发链接错误。很公平,我没有告诉它在哪里看。

当我包含头文件 mysql.h 并重新构建时,Visual Studio 会为“ mysql_server_end() ”抛出一个链接错误。我检查了 mysql.h (在我的构建环境中),我想使用的函数的唯一引用( mysql_library_end() )是:

#define mysql_library_end mysql_server_end

文件中有 mysql_server_end() 的函数声明,但 Visual Studio 似乎看不到它。我只是被这个链接器错误困住了,我不知道它为什么会发生。

任何人都可以帮忙吗?

干杯,亚当。

编辑

我正在使用 Visual Studio 2005。来自 IDE 的错误消息是:

错误 6 错误 LNK2019:未解析的外部符号 _mysql_server_end@0 在函数“public: __thiscall CConnectionParams::~CConnectionParams(void)”(??1CConnectionParams@@QAE@XZ) CConnectionParams.obj 中引用

其中 CConnectionParams 是调用 mysql_library_end() 的 .cpp 文件。

4

1 回答 1

1

找到了解决方案。仅靠自己的头文件是不够的,需要链接整个库。有两个库可用于连接 MySQL C API:libmysql.lib 和 mysqlclient.lib。一种是静态的,一种是动态的。对我有用的是 libmysql.lib。请注意,因此我不需要#include mysql.h。

要在 Visual Studio 中链接此库,您只需将其作为项目依赖项的一部分包含在内。我将它从它的目录 mysql install 拖到解决方案树中,但这不是一个非常优雅的方法,因为它仅适用于 VS 而不适用于其他构建环境。

于 2012-11-20T00:42:07.843 回答