2

我正在尝试将 MySQL Connector/C++ 添加到我的 Visual Studio 2010 项目中。

我按照步骤(这里,mysql docs)将其添加到 Visual Studio(我还在“其他包含目录”中添加了 Boost)。

它要求一个“sqlstring.h”文件(一个版本怎么会错过一个文件?!),所以我从源文件(mysql源档案)中得到它。

然后,它要求 libmyql.lib,我有 MySQL Server 5.5\lib 的 lib 目录。

现在,我遇到了这个错误:

错误 127 错误 LNK1120:31 个未解析的外部 C:\Users\Haks\Documents\Visual Studio 2010\Projects\ProductManager\Debug\ProductManager.exe ProductManager

错误 60 错误 LNK2001:无法解析的外部符号"__declspec(dllimport) bool __cdecl std::operator<<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_??$?MDU?$char_traits@D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@0@Z) C:\Users\Haks\Documents\Visual Studio 2010\Projects\ProductManager\ProductManager\mysqlcppconn-static.lib(mysql_ps_resultset.obj) ProductManager

所以,也许是因为我得到了 MySQL Connector/C++ 1.1 的二进制版本,也许它与 VS 2010 不兼容......

但是我没有找到编译源文件的好方法,而且我从不使用 Boost 或 CMake,而且似乎需要它。

我发现没有提到我的问题,所以如果有人得到回应或一个好的方法,这对我和我认为的很多人都会非常有用。

谢谢

4

3 回答 3

6

首先,感谢 dar7yl 指出正确的方向。

在花了很多时间调试 mysql 连接(VS 2010,C++)之后,这被证明是一个令人毛骨悚然的经历,我不得不说一些关于它的事情。(假设您正确设置了 C++ 包含文件目录和链接目录+附加依赖文件,否则请参阅第 2 点的网站以供参考)

0.) 是的,我们需要 boost 库。下载 boost 库(搜索 google)并将其解压缩到您的开发文件夹中,并让您的 c++ 附加包含目录指向它(boost 主目录,而不是 boost 子目录)。

1.) 需要明确VS解决方案配置模式“debug”和“release”的区别。在目录...\mysql\Connector C++ ____\lib\ 下完全安装MYSQL 后提供的.lib 文件有两个debug 目录,并相应地选择与解决方案模式“debug”和“release”一起使用。主要区别是“调试”模式使用额外的 .pdb 文件。

2.) http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-apps-windows-visual-studio.html给出了 VS2008 mysql 连接设置的非常详细的大纲。特别需要在[Project, Properties tree view, under C++, Preprocessor]下包含CPPCONN_PUBLIC_FUNC=和HAVE_INT8_T=1这两条语句

3.) 明确您希望与库的连接模式,mysqlcppconn.lib 是基于 dll 的,而 mysqlcppconn-static.lib 是基于静态的。对于基于dll的lib,需要将相关的dll mysqlcppconn.dll存放到\windows\system32\或其他系统路径下才能访问。
对于静态连接,请记住它使用外部 C 连接,因此您将需要来自 ...\mysql\connectorc c ___\ 的 libmysql.lib + libmysql.dll(如果在“调试”下,则为 libmysql.pdb),如果没有,您将获得未解析的外部符号错误 LNK 2019。因此请及时更新您的 c++ 包含文件目录,链接包含文件目录,相应的附加依赖项并将 .dll 文件存放到系统路径或 ....\windows\system32\

4.)在这一点上,事情应该对我们中的一些人有用。不,它对我不起作用。原因?dar7yl 概述的库可比性问题。因此,如果是这种情况,请在http://dev.mysql.com/downloads/connector/cpp/下下载连接器的源代码通过选择平台到源代码。打开包装,从这里开始有点复杂。没有 VS 解决方案或项目文件?不用担心,看到 cmake__.txt 文件了吗?这就是我们的解决方案。下载 cmake 并让源目录和目标目录指向您解压缩的源代码目录。然后在目录中打开 cmake__.txt 并搜索关键字“boost”并更新 boost 目录以指向您的 boost 目录。运行配置并设置为 VS 2010,检查概述的配置并更改任何必要的名称/值表,然后按生成。现在你的项目+解决方案文件应该已经生成了,打开它,你会看到很多项目。我们只关心 mysqlcppconn 和 mysqlcppconn-static。检查并更新两个项目属性中的包含文件,链接文件+依赖项并编译。

至此,mysql 连接现在对我有用,希望它也对你有用。上面可能遗漏了一些细节,我深表歉意。

于 2012-07-17T23:42:22.520 回答
2

只是对 dddddd 好帖子的一个小补充。如果你在 Windows7 上编译,那么你可能会从 libmysql.lib 库中得到一些“未解析的外部”。我发现这是因为 libmysql.lib 来自服务器的 64 位安装。您需要找到 32 位版本并与之链接,或者直接安装 32 位服务器。

于 2013-04-26T02:20:29.030 回答
1

通过下载源代码并使用与我的项目相同的设置进行编译,我终于让 MySQL Connector/C++ 与 Visual Studio 2010 一起工作。它仍然警告 SqlString 库:

j:\mysql-connector-c++-1.1.0\cppconn\sqlstring.h(36): warning C4251: 'sql::SQLString::realStr' : class 'std::basic_string<_Elem,_Traits,_Ax>' needs to have dll-interface to be used by clients of class 'sql::SQLString'

但是,这似乎没问题。

于 2011-06-02T20:17:57.147 回答