C语言链接mysql数据库错误:

C语言链接mysql数据库错误:

一 编译错误:

eg:用gcc编译出现如下的错误:

test.c:(.text+0x5e):对‘mysql_init’未定义的引用

但是在头文件中已经#include<mysql/mysql.h>

解决方法是:

gcc xx.c -lmysqlclient -L/usr/lib64/mysql
二 由~mysql-config –libs –cflags~衍生的学习
  • 出现 undefined reference to ‘xxxxx’错误,是因为源码没有什么问题,而是编译链接错误;也就是编译参数没有指定程序要用到的库文件

    • 比如上边连接mysql程序include 了 h 文件,但编译的时候没有指明这个库文件libmysqlclient.so 。
  • -l和-L 参数(gcc)

    • -l参数是指定库文件名 如 -lxx 那么xx真正的库文件名是libxx.so。如 mysql的库文件名是 libmysqlclient.so 那么就应该是 -lmysqlclient 。把-l去掉 lib+mysqlclient+.so=libmysqlclient.o 这就是mysql的库名。

    • -L/usr/lib64/mysql 如这个的意思是告诉gcc 这个 libmysqlclient.so 文件在 /usr/lib64/mysql 这个目录下。

    • 那么完整的命令是 :

    gcc xxxx.c -o xxxx -lmysqlclient -L/usr/lib64/mysql

  • 这样是大概清楚了但库的文件名路径要手动去找吗?是不是有点麻烦下面我们来看一个命令

    • /usr/bin/
    • [root@localhost bin]# mysql_config –libs
    • -L/usr/lib64/mysql -lmysqlclient -lpthread -lm -lrt -lssl -lcrypto -ldl
    • 从该命令执行的结果可以看出我们要的东西:-L/usr/lib64/mysql -lmysqlclient 不就在这吗!很多软件都提供了这样的命令 xxxx_config –libs;
  • -I(大写的 i )参数 是指明头文件.h文件所在的目录比如 mysql.h 我的系统是centos 7 64 我的mysql 是 yum 安装的安全包 /usr/include/mysql 那么 -I/usr/include/mysql 这样的指明.h文件的路径。

    • 下面我们来执行一个命令:
    • [root@localhost mysql]# mysql_config –cflags
    • -I/usr/include/mysql -m64
    • -I/usr/include/mysql 不就.h文件的路径吗!当然一般应该不用指定.h的路径 在源码中include已经写了。
    • gcc xxxx.c -o xxxx -lmysqlclient -L/usr/lib64/mysql

原博客地址:http://blog.sina.com.cn/s/blog_3c4b42600102xc33.html

猜你喜欢

转载自blog.csdn.net/lalala323/article/details/81699728
今日推荐