免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3091 | 回复: 5
打印 上一主题 下一主题

C语言连接MYSQL问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-01 23:30 |只看该作者 |倒序浏览
本帖最后由 EdgeYang 于 2012-02-01 23:36 编辑

写了一个连接MYSQL的C程序,出现以下错误信息:

cc -I/usr/include/mysql -Wall -g  -lmysqlclient -g -L/usr/lib  connect1.c   -o connect1
/tmp/ccykDQvd.o: In function `main':
/home/jie/Beginning Linux Program/ch08/connect1.c:9: undefined reference to `mysql_init'
/home/jie/Beginning Linux Program/ch08/connect1.c:15: undefined reference to `mysql_real_connect'
/home/jie/Beginning Linux Program/ch08/connect1.c:24: undefined reference to `mysql_close'
collect2: ld 返回 1
make: *** [connect1] 错误 1


从出错信息看,是链接库找不到的问题。
因此查看了 /usr/lib 下的库文件发现:


[jie@jie:/usr/lib]$ls libmysqlclient*
libmysqlclient.a    libmysqlclient_r.so     libmysqlclient_r.so.16.0.0  libmysqlclient.so.16
libmysqlclient_r.a  libmysqlclient_r.so.16  libmysqlclient.so           libmysqlclient.so.16.0.0


链接库路径没错,库文件也有,怎么就找不到呢?
附上简单源码:
  1. #include<stdlib.h>                                                                  
  2. #include <stdio.h>

  3. #include "mysql.h"

  4. int main(int argc, char *argv[]) {
  5.    MYSQL *conn_ptr;

  6.    conn_ptr = mysql_init(NULL);
  7.    if (!conn_ptr) {
  8.       fprintf(stderr, "mysql_init failed\n");
  9.       return EXIT_FAILURE;
  10.    }
  11.    
  12.    conn_ptr = mysql_real_connect(conn_ptr, "localhost", "jie", "edgeyang",
  13.                                                      "children", 0, NULL, 0);

  14.    if (conn_ptr) {
  15.       printf("Connection success\n");
  16.    } else {
  17.       printf("Connection failed\n");
  18.    }

  19.    mysql_close(conn_ptr);

  20.    return EXIT_SUCCESS;
  21. }
复制代码
另外,使用的系统刚升级为UBUNTU 11.10,MYSQL 版本信息如下:

Server version                5.1.58-1ubuntu1
Protocol version        10
Connection                Localhost via UNIX socket
UNIX socket                /var/run/mysqld/mysqld.sock
Uptime:                        5 hours 41 min 40 sec


在系统升级之前,同样的程序是可以连接到MYSQL的!

论坛徽章:
0
2 [报告]
发表于 2012-02-02 06:37 |只看该作者
You need to figure out the .so file is a real file or it's just a  link. If your current build command doesn't work, try below command:
$ cc -I/usr/include/mysql -Wall -g  connect1.c   -o connect1 /usr/lib/libmysqlclient.a

论坛徽章:
0
3 [报告]
发表于 2012-02-02 12:25 |只看该作者
回复 2# zyzbill
  1. $make
  2. cc -I/usr/include/mysql -Wall -g  /usr/lib/libmysqlclient.a  connect1.c   -o connect1
  3. /tmp/ccBjMIw5.o: In function `main':
  4. /home/jie/Beginning Linux Program/ch08/connect1.c:9: undefined reference to `mysql_init'
  5. /home/jie/Beginning Linux Program/ch08/connect1.c:15: undefined reference to `mysql_real_connect'
  6. /home/jie/Beginning Linux Program/ch08/connect1.c:24: undefined reference to `mysql_close'
  7. collect2: ld 返回 1
  8. make: *** [connect1] 错误 1
复制代码
还是相同的错误!

论坛徽章:
0
4 [报告]
发表于 2012-02-02 17:48 |只看该作者
It's important to put /usr/lib/libmysqlicnet.a at the end of the command

论坛徽章:
0
5 [报告]
发表于 2012-02-02 19:32 |只看该作者
回复 4# zyzbill

将静态库放到命令最后,出现了错误。

但是将动态链接库放置在命令最后,编译链接成功!
  1. [jie@jie:~/Beginning Linux Program/ch08]$gcc -g -Wall -o connect1 -I/usr/include/mysql connect1.c -L/usr/lib -lmysqlclient
  2. [jie@jie:~/Beginning Linux Program/ch08]$
复制代码
但为什么将链接库放置到命令的后面,就能够成功找到链接库呢?

论坛徽章:
0
6 [报告]
发表于 2012-02-03 15:51 |只看该作者
学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP