当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 用C连接MySQL数据库程序的编译问题!
帖子发表于 : 2008-12-28 22:24 

注册: 2008-12-22 19:40
帖子: 35
送出感谢: 0 次
接收感谢: 0 次
我是用C API连接的mysql数据库。但是,编好程序后我不会编译。
方法一:gcc test.c -o test -I/user/include/mysql -L/user/lib/mysql -lmysqlclient
我试了一下,提示找不到mysql.h
分析:
/user/include/mysql:全是.h文件,应该对应编译阶段
/user/lib/mysql:是静态库和动态库,应该与上面的.h文件对应,用于连接阶段
libmysqlclient.a:估计也是用于连接的,不知道为什么独立于/user/lib/mysql再来一个静态库? :em23 :em23

方法二:gcc test.c -o test $(mysql_config --cflags) $(mysql_config --libs)
成功!!!

分析1:
在终端中输入:mysql_config,可看到对应关系:
--cflags [-I/usr/include/mysql -DBIG_JOINS=1 -fPIC]
--libs [-Wl,-Bsymbolic-functions -L/usr/lib/mysql -lmysqlclient]
分析2:
尝试先生成目标文件再连接。
有三个程序:test1.c test2.c test3.c ,其中test1.c用于连接mysql。
单独编译:
gcc -c test1.c -o a.o -I/user/include/mysql 提示错误!
gcc -c test1.c -o a.o $(mysql_config --cflags) 通过!
gcc -c test2.c -o b.o
gcc -c test3.c -o c.o
连接:
gcc a.o b.o c.o -o test -L/user/lib/mysql -lmysqlclient 通过!
gcc a.o b.o c.o -o test -lmysqlclient 通过!这可能是因为我的程序中没用到-L/user/lib/mysql中的内容。
gcc a.o b.o c.o -o test $(mysql_config --libs) 通过!

最终分析:方法一中, -I/user/include/mysql 是不好用的,后面的-L/user/lib/mysql -lmysqlclient好用。方法二是好用的。但两中方法有对应关系,是不是我哪里没设置,或少输了条语句什么的?还有libmysqlclient.a是怎么回事?为什么是单独的?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 用C连接MySQL数据库程序的编译问题!
帖子发表于 : 2008-12-29 20:53 
头像

注册: 2007-03-13 17:26
帖子: 2254
送出感谢: 0 次
接收感谢: 1
你干什么?

第二个不就可以

gcc *.c -o aaa $(mysql_config --cflags --libs)


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 用C连接MySQL数据库程序的编译问题!
帖子发表于 : 2008-12-30 11:23 

注册: 2008-12-22 19:40
帖子: 35
送出感谢: 0 次
接收感谢: 0 次
:em03 要连接的那几个库的含义我不明白 :em03 libmysqlclient.a里面是什么?是客户端静态库?那/user/lib/mysql呢?


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 用C连接MySQL数据库程序的编译问题!
帖子发表于 : 2008-12-30 12:48 

注册: 2006-03-10 15:10
帖子: 3182
地址: xi'an China
送出感谢: 0 次
接收感谢: 2
引用:
gcc a.o b.o c.o -o test -L/user/lib/mysql -lmysqlclient

引用:
:em03 要连接的那几个库的含义我不明白 :em03 libmysqlclient.a里面是什么?是客户端静态库?那/user/lib/mysql呢?



其实这儿只涉及一个库 -lmysqlclient, (它可能代表libmysqlclient.a,也可能代表libmysqlclient.so)

你已经知道, 通过-l 选项指定的库 gcc 会去编译器和系统预设的路径中去找对应的库,如果共享库和静态库同时存在,默认选择共享库。
如果你的库文件不在预设的路径中呢? 比如你的 libmysqlclient.a 放在 /home/hahha/hhaha/hahha/lib 目录中,怎么让gcc 能找到它呢?
好了,用 -L 选项 -L/home/hahha/hhaha/hahha/lib


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 用C连接MySQL数据库程序的编译问题!
帖子发表于 : 2008-12-30 16:10 

注册: 2008-12-22 19:40
帖子: 35
送出感谢: 0 次
接收感谢: 0 次
:em50 :em54 :em63 谢谢你的解答!!!


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 用C连接MySQL数据库程序的编译问题!
帖子发表于 : 2009-01-29 12:11 

注册: 2009-01-29 12:09
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
可以正常编译,
但是运行时却找不到 libmysqlclient.so.16 是怎么回事


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译