c/c++使用VS2013连接MySQL与ubuntu下c链接mysql

vs连接数据库其实就是将mysql数据库.h头文件接口、lib链接文件和dll执行文件加入到项目中。下面是配置如何加入。



转于http://www.cnblogs.com/justinzhang/archive/2011/09/23/2185963.html

一、VS2013工程设置工作

首先,建立一个windows应用程序的工程,将C/C++->预处理器->预处理器定义下的_WINDOWS改为_CONSOLE,

image

将连接器->系统->子系统 选择为控制台。

image

由于我们要使用Mysql的API,并且我们机子上肯定安装了Mysql数据库,所以我们要将工程的头文件路径指向Mysql安装目录的同文件mysql.h所在的位置,将连接库路径指向libmysql.lib所在的路径,

在我的机子上,Mysql 的安装路径为:C:\Program Files\MySQL\MySQL Server 5.1

image

image

我们需要把VS2008的工程中的头文件路径和连接库路径指向上面的两个地方:

将x项目属性页的C/C++->常规->附加包含目录指向:C:\Program Files\MySQL\MySQL Server 5.1\include

image

将项目属性页的链接器->常规->附加库目录指向:C:\Program Files\MySQL\MySQL Server 5.1\lib\opt.

image

将链接器->输入->附加依赖项中添加libmysql.lib。

image


如果不设置链接器->输入->附加依赖项中添加libmysql.lib,那么会出现如下的错误:

1>------ 已启动全部重新生成: 项目: MySql-Connect, 配置: Debug Win32 ------
1>正在删除项目“MySql-Connect”(配置“Debug|Win32”)的中间文件和输出文件
1>正在编译...
1>MySql_Connect.cpp
1>x:\编程练习\c-c++\c\mysql_connect.cpp(35) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 参见“scanf”的声明
1>x:\编程练习\c-c++\c\mysql_connect.cpp(72) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 参见“sprintf”的声明
1>x:\编程练习\c-c++\c\mysql_connect.cpp(86) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> d:\program files\microsoft visual studio 9.0\vc\include\stdio.h(366) : 参见“sprintf”的声明
1>正在编译资源清单...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>正在链接...
1>LINK : 没有找到 d:\我的文档\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe 或上一个增量链接没有生成它;正在执行完全链接
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_free_result@4,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_num_fields@4,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_fetch_row@4,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_store_result@4,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_error@4,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_real_query@12,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_select_db@8,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用
1>MySql_Connect.obj : error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用
1>d:\我的文档\Visual Studio 2008\Projects\MySql-Connect\Debug\MySql-Connect.exe : fatal error LNK1120: 10 个无法解析的外部命令
1>生成日志保存在“file://d:\我的文档\Visual Studio 2008\Projects\MySql-Connect\MySql-Connect\Debug\BuildLog.htm”
1>MySql-Connect - 11 个错误,3 个警告
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========



如果到这里你还没成功,继续看下面的解析:



之前经过配置,成功的在vs2013中成功的用c语言连接上的MySQL数据库,但是最近连接MySQL数据库,无论怎么配置,老是出错。

代码如下:

 

 
 
  1. #include <windows.h>  
  2. #include <stdio.h>  
  3. #include <string.h> 
  4. #include <mysql.h> 
  5.  
  6. #pragma comment (lib, "libmysql.lib") 
  7. #pragma comment (lib, "mysqlclient.lib") 
  8.  
  9. int main()  
  10.     char szTargetDSN[] = "test"; 
  11.     char szSqlText[500]=""; 
  12.     MYSQL * myData; 
  13.     myData = mysql_init((MYSQL*)0); 
  14.      
  15.     //连接数据库  
  16.     if(mysql_real_connect( myData, NULL, "root", "123456", szTargetDSN, MYSQL_PORT, NULL, 0)) 
  17.     { 
  18.         printf("数据库连接成功!/n"); 
  19.         //构造SQL语句 
  20.         sprintf(szSqlText,  "create table mytable" "(time datetime, s1 char(6), " "s2 char(11), s3 int, s4 int)");  
  21.         if (mysql_query( myData, szSqlText)) 
  22.         {//执行SQL语句出错  
  23.             printf( "Can't create table"); 
  24.             mysql_close( myData ); 
  25.             return FALSE; 
  26.         } 
  27.         printf("表创建成功/n"); 
  28.         mysql_close(myData); 
  29.     } 
  30.      
  31.     return TRUE; 

错误如下:

error LNK2019: 无法解析的外部符号 _mysql_real_connect@32,该符号在函数 _main 中被引用

error LNK2019: 无法解析的外部符号 _mysql_query@8,该符号在函数 _main 中被引用

error LNK2019: 无法解析的外部符号 _mysql_init@4,该符号在函数 _main 中被引用

error LNK2019: 无法解析的外部符号 _mysql_close@4,该符号在函数 _main 中被引用

 

 

 

采用了以下的办法:

点击

1.项目->属性->vc++目录。 
然后在"包含目录"中添加"E:/Program Files/MySQL/MySQL Server 5.5/include" 
“库目录”中添加"E:/Program Files/MySQL/MySQL Server 5.5/lib"和"E:/Program Files/MySQL/MySQL Server 5.5/lib/Debug"。

2.项目->属性->链接器->输入->附加依赖项中添加libmysql.lib

 

但是编译依旧还是同样的问题。

 

 

于是开始思考,

 

lib是编译时需要的,dll是运行时需要的。 

如果要完成源代码的编译,有lib就够了。 

如果也使动态连接的程序运行起来,有dll就够了。 

在开发和调试阶段,当然最好都有。 

一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。 

 

1.编译是通过静态链接库(lib)去找到接口的。

2.#pragma comment (lib, "libmysql.lib")

#pragma comment (lib, "mysqlclient.lib")

但是这两句代码并没有报错,证明这两个链接库也正常加入了啊。怎么还是出现“无法解析的外部符号”,很纳闷。

 

 

 

 

 

百思不得其解,踏遍百度谷歌必应。还是木有办法,或许就是那么灵光一闪,我擦。突然想起一个问题了。哥哥我装的是win7 64位啊,MySQL也是赤裸裸的64位,丫的,我用WIN32 项目搞毛线。于是有一个猜想就是,MySQL 64位的lib也是64位的接口。

 

于是用了两部去证明这个想法,

.项目->属性->配置管理器

活动解决方案平台,下拉选新建,出现一个新的对号框,在键入选择新平台中选择X64

 

 

最后重新编译,这次完全证明的我想法是对的。编译成功。哦也!

 

 

 

 

最后分析一下解决这个问题关键,其实这个问题很简单。搞明白dll和lib的作用,或许都能分析出这个问题了原因了。

写到这,再去搜索果不其然

http://www.linuxso.com/sql/19105.html

 

再一次说明,遇到问题要善于思考。

 


本文出自 “小桥流水的技术博客” 博客,请务必保留此出处http://idear.blog.51cto.com/4097017/871174





最后,也可以直接将.h文件和dll文件加到你的工程目录里。














附赠:

Ubuntu下用C语言访问MySQL数据库

在Ubuntu下费了好长时间终于让C操作MySQL成功了,在此把方法记下来,留着以后用。先安装MySQL 
代 码: 
sudo apt-get install mysql-server mysql-client

再装开发包 
代码: 
sudo apt-get install libmysqlclient15-dev

可以用以下代码测试一下

/* Simple C program that connects to MySQL Database server*/
#include <mysql.h>
#include <stdio.h>

main() {
    MYSQL *conn;
    MYSQL_RES *res;
    MYSQL_ROW row;

   char *server = "localhost";
   char *user = "root";
   char *password = ""; /* 此处改成你的密码 */
   char *database = "mysql";

    conn = mysql_init(NULL);

   /* Connect to database */
   if (!mysql_real_connect(conn, server,
          user, password, database, 0, NULL, 0)) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }

   /* send SQL query */
   if (mysql_query(conn, "show tables")) {
      fprintf(stderr, "%s\n", mysql_error(conn));
      exit(1);
   }

    res = mysql_use_result(conn);

   /* output table name */
   printf("MySQL Tables in mysql database:\n");
   while ((row = mysql_fetch_row(res)) != NULL)
      printf("%s \n", row[0]);

   /* close connection */
    mysql_free_result(res);
    mysql_close(conn);
} 
编译:


方法一:gcc test.c -o test -I/user/include/mysql                               试了一下,提示找不到mysql.h。

我试了一下,提示找不到mysql.h。
分析:
/user/include/mysql:全是.h文件,应该应编译阶段
/user /lib/mysql:是静态库和动态库,www.linuxidc.com应该与上面的.h文件对应,用于连接阶段。

方法二:gcc test.c -o test -L/user/lib/mysql -lmysqlclient                成功!

方法三:gcc test.c -o test $(mysql_config --cflags) $(mysql_config --libs)

或者:gcc test.c -o test $(mysql_config --cflags --libs)                        成功!


转自http://www.oschina.net/question/12_7956

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你的操作系统是 CentOS 或 RHEL,应该选择 MySQL Yum Repository。 如果你的操作系统是 Debian 或 Ubuntu,应该选择 MySQL APT Repository。 如果你的操作系统是 SUSE Linux Enterprise Server 或 openSUSE,应该选择 MySQL SUSE Repository。 如果你需要安装 MySQL 数据库,应该选择 MySQL Community Server。 如果你需要安装 MySQL 集群,应该选择 MySQL Cluster。 如果你需要安装 MySQL 路由器,应该选择 MySQL Router。 如果你需要使用 MySQL 命令行工具,应该选择 MySQL Shell。 如果你需要使用 MySQL Kubernetes 操作符,应该选择 MySQL Operator。 如果你需要使用 MySQL NDB Kubernetes 操作符,应该选择 MySQL NDB Operator。 如果你需要使用 MySQL GUI 工具,应该选择 MySQL Workbench 或 MySQL Installer for Windows。 如果你需要使用 MySQL C API,应该选择 C API (libmysqlclient)。 如果你需要使用 MySQL C++ Connector,应该选择 Connector/C++。 如果你需要使用 MySQL JDBC Connector,应该选择 Connector/J。 如果你需要使用 MySQL .NET Connector,应该选择 Connector/NET。 如果你需要使用 MySQL Node.js Connector,应该选择 Connector/Node.js。 如果你需要使用 MySQL ODBC Connector,应该选择 Connector/ODBC。 如果你需要使用 MySQL Python Connector,应该选择 Connector/Python 或 MySQL Native Driver for PHP。 如果你需要进行性能测试,应该选择 MySQL Benchmark Tool。 如果你需要下载时区描述表,应该选择 Time zone description tables。 具体选择哪个取决于你的需求和操作系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值