非cmake方式Visual C++ 2010编译mysql-connector-C++静态库


1. 缘起
 从mirrors.sohu.com/mysql上下载已编译好的mysql-connector-c++ 1.1.8,按网络上的教程加入到visual c++ 2010的工程,访问MySQL中的数据表时,执行如下代码出错:
 boost::scoped_ptr< sql::ResultSet > res (stat->executeQuery("SELECT id, 'mary' FROM test"));
 while (res && res->next())
 {
cout << "  ID:" << res->getInt("id") << endl; //正确
cout << "NAME:" << res->getString(2) << endl; //出错
 }
 由于没法跟踪到代码级,求助度娘,有某位先行说这是因为debug版本使用了release版本的mysql-connector-C++动态库的问题。那,自己编译吧!
 
2. 准备:
 1)从官网下载boost库 (做个项目之前,我已经下载了boost 1.56,这里略;  PS:mysql-connector-C++只用到了boost的头文件,应该可以不编译就可以使用)
 2)从http://mirrors.sohu.com/mysql/Connector-C%2b%2b/下载并解压mysql-connector-c++-1.1.8i.zip (源码)
 3)从http://mirrors.sohu.com/mysql/Connector-C%2b%2b/下载并解压mysql-connector-c++-noinstall-1.1.8-win32.zip (PS:编译中要用到其config.h等头文件)
 4)从http://mirrors.sohu.com/mysql/MySQL-5.5/下载并解压mysql-5.5.55-win32.zip (PS: 编译时要用到其中的mysql-connector-c的静态库mysqlclient.lib以及头文件 )
 
3. 新建项目
 打开VS2010,新建Win32 Library项目“libmysqlconn-c++1.1.8”,删除与托管(.Net)相关的文件和代码
 
4. 拷贝必要文件 (参考: http://blog.csdn.net/shellching/article/details/8137806, VS2010编译mysql-connector-c++)
 1)将mysql-connector-c++源码中的driver文件夹拷贝到项目文件夹中,
 2)在项目文件夹中新建include目录,这里需要放两个文件夹:
    a)将mysql-connector-c++ noinstall目录中的cppconn文件夹拷贝至include中
    b)新建一个mysql文件夹,并将mysql-5.5.55-win32.zip解压之后的include文件夹中的头文件拷贝至其中
 3)在项目文件夹中新建lib目录并将mysql-5.5.55-win32.zip解压之后的lib目录中的mysqlclient.lib拷贝至其中
 
5.添加必要文件到项目
 1)将mysql-connector-c++中driver目录下的.h和.cpp文件加入项目(先不加子文件夹nativeapi中的文件):
    项目右键->Add->New Filter,命名为“Driver”,“Driver”右键->Add->Existing Item,
    找到并选中driver文件夹下的.h和.cpp文件,加入过滤器Driver中
 2)再新建Native过滤器,加入driver\native中的cpp文件,注意“libmysql_dynamic_proxy.cpp”和“libmysql_static_proxy.cpp”一定不要添加,否则会出一堆错误“error LNK2005”
 
6. 设置项目属性
 1)C/C++增加“附加包含目录”:
  项目文件夹下的include
  项目文件夹下的include下的cppconn
  项目文件夹下的include下的mysql
  boost目录
 
 2)设置预处理器定义:
   WIN32;_DEBUG;;CPPCONN_LIB_BUILD
   注释:这里编译的是静态库,CPPCONN_LIB_BUILD是静态库的预处理器定义
 
 3)设置链接器
   添加“附加包含目录”:项目文件夹下下的lib文件夹
   添加“附加依赖项”: mysqlclient.lib
 
7. 编译
 生成libmysqlconn-c++1.1.8.lib


8. 使用
 在步骤“0.缘起”中的项目导入libmysqlconn-c++1.1.8.lib,编译,报告如下警告:
 LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
 无视该警告,运行,正确输出结果!

 注释:这或许是因为mysql-connector-c的静态库mysqlclient.lib是release版本,但是使用mysql-5.5.55-win32.zip解压之后的lib/debug目录中的mysqlclient.lib会导致sql::mysql::get_mysql_driver_instance()失败,我没有编译mysql-connector-c,原因尚不清楚,有知道的筒子请告知一下,这里先行谢过!


9. 整理好的vc++2010工程及源代码可以在如下url下载:

http://download.csdn.net/download/hylaking/10141712


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值