用C连接MySQL数据库程序的编译问题!

C、C++和Java语言
回复
绿色植物
帖子: 35
注册时间: 2008-12-22 19:40
送出感谢: 0
接收感谢: 0

用C连接MySQL数据库程序的编译问题!

#1

帖子 绿色植物 » 2008-12-28 22:24

我是用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是怎么回事?为什么是单独的?
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26
送出感谢: 0
接收感谢: 1 次

Re: 用C连接MySQL数据库程序的编译问题!

#2

帖子 windwiny » 2008-12-29 20:53

你干什么?

第二个不就可以

gcc *.c -o aaa $(mysql_config --cflags --libs)
绿色植物
帖子: 35
注册时间: 2008-12-22 19:40
送出感谢: 0
接收感谢: 0

Re: 用C连接MySQL数据库程序的编译问题!

#3

帖子 绿色植物 » 2008-12-30 11:23

:em03 要连接的那几个库的含义我不明白 :em03 libmysqlclient.a里面是什么?是客户端静态库?那/user/lib/mysql呢?
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
送出感谢: 0
接收感谢: 2 次
联系:

Re: 用C连接MySQL数据库程序的编译问题!

#4

帖子 dbzhang800 » 2008-12-30 12:48

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
绿色植物
帖子: 35
注册时间: 2008-12-22 19:40
送出感谢: 0
接收感谢: 0

Re: 用C连接MySQL数据库程序的编译问题!

#5

帖子 绿色植物 » 2008-12-30 16:10

:em50 :em54 :em63 谢谢你的解答!!!
swiftcore
帖子: 1
注册时间: 2009-01-29 12:09
送出感谢: 0
接收感谢: 0

Re: 用C连接MySQL数据库程序的编译问题!

#6

帖子 swiftcore » 2009-01-29 12:11

可以正常编译,
但是运行时却找不到 libmysqlclient.so.16 是怎么回事
回复

回到 “C/C++/Java”