我正在尝试将MySQL Connector / C ++添加到我的Visual Studio 2010项目中。
我按照步骤(here, mysql docs)将其添加到Visual Studio(我还在“其他包含目录”中添加了Boost)。
它要求一个“sqlstring.h”文件(一个版本如何错过一个文件?!),所以我从源文件(mysql source archives)获得了它。
然后,它要求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,而且似乎需要它。
我没有找到任何关于我的问题的提法,所以如果有人得到回应或有好的方式,那对我和我想的很多人来说都会非常有用。
谢谢
答案 0 :(得分:6)
首先,thanx到dar7yl指向正确的方向。
花了很多时间调试mysql连接(VS 2010,C ++),这被证明是一个非常令人兴奋的经历,我不得不说些什么。 (假设您正确设置了C ++包含文件目录和链接目录+附加依赖文件,否则请参考第2点的网站以供参考)
0。)是的,我们需要升级库。下载boost库(搜索谷歌)并将其解压缩到您的开发文件夹中,并让您的c ++附加包含目录指向它(提升主目录,而不是boost子目录)。
1。)需要明确VS解决方案配置模式“debug”和“release”的区别。在目录下完全安装MYSQL后提供的.lib文件... \ mysql \ Connector C ++ ____ \ lib \有两个debug和opt目录,用于解决方案模式“debug”和“release”。主要区别是“调试”模式使用额外的.pdb文件。
2。)http://dev.mysql.com/doc/refman/5.1/en/connector-cpp-apps-windows-visual-studio.html给出了VS2008 mysql连接设置的非常详细的概述。特别需要在[项目,属性树视图下,在C ++,预处理器下]包含CPPCONN_PUBLIC_FUNC =和HAVE_INT8_T = 1的两个语句
3。)清楚你想要哪种模式的连接,mysqlcppconn.lib是基于dll的,而mysqlcppconn-static.lib是基于静态的。对于基于dll的lib,需要将相关的dll mysqlcppconn.dll存入\ windows \ system32 \或其他系统路径进行访问。
对于静态连接,请记住它使用extern C连接,因此您将需要来自... \ mysql \ connectorc c ___ \的libmysql.lib + libmysql.dll(libmysql.pdb,如果在“debug”下),如果不是,您将获得未解析的外部符号错误LNK 2019.因此,请及时更新您的c ++包含文件目录,链接包含文件目录,相应的附加依赖项,并将.dll文件存入系统路径或.... \ windows \ system32 \
4。)在这一点上,事情应该对我们中的一些人有用。不,它对我不起作用。原因? dar7yl概述的库可比性问题。因此,如果是这种情况,请通过select platform到源代码下载http://dev.mysql.com/downloads/connector/cpp/下连接器的源代码。打开包装,从这里开始变得有点复杂。 没有VS解决方案或项目文件?不用担心,看到cmake __。txt文件?这是我们的解决方案。 下载cmake并让源目录和目标目录指向解压缩的源代码目录。然后在目录中打开cmake __。txt并搜索关键字“boost”并更新boost目录以指向您的boost目录。运行configure并设置为VS 2010,检查概述的配置并更改所需的名称/值表,然后按generate。 到目前为止,您的项目+解决方案文件应该已生成,打开它,您将看到许多项目。我们只关心mysqlcppconn和mysqlcppconn-static。检查并更新两个项目属性中的包含文件,链接文件+依赖项并进行编译。将生成的.lib + .dll(以及.pdb,如果使用“debug”模式)放入相应的目录中,您的项目现在应该可以正常工作。
到目前为止,mysql连接现在对我有用,希望它也适合你。上面可能缺少一些细节,我很抱歉。
答案 1 :(得分:2)
dddddd很棒的帖子只是一小部分。如果您在Windows7上进行编译,那么您可能会从libmysql.lib库中获得一些“未解析的外部”。我发现这是因为libmysql.lib来自服务器的64位安装。您需要找到32位版本并与之链接,或者只安装32位服务器。
答案 2 :(得分: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'
但是,似乎没问题。