在编译mysql或sqlite时出现问题的解决方法

2017-05-04  本文已影响0人  雨打梨花闭门寒

本文提到的这两个问题是我在编译时出现的问题,然后就是用本文提到的方法解决的,特意记下来方便以后查看。

使用linux下的C操作MYSQL

编译时提示头文件include <mysql/mysql.h>不存在的解决办法:

先找到mysql.h文件在哪里,gcc test.c -o test -I /usr/lib/mysql/include -L /usr/lib/mysql/ -lmysqlclient 加‘-I’导向头文件mysql.h所在的文件目录

解决可以尝试安装mysql-devel:

$ sudo yum install mysql-devel -y    //RHEL,Centos,Fedora
$ sudo apt-get install libmysqlclient-dev -y  //Ubuntu
如果已经安装成功了,找到mysql.h的文件路径,-I 编译即可
$ sudo  find /usr/ -name 'mysql.h'
$ gcc -I/usr/include/mysql ...
使用linux下的C操作SQLLITE

由于linux下侧重使用命令,没有win的操作容易上手,所以在测试C操作SQLITE时会比较容易出现错误,给大家做一个简单的程序进行测试,演示怎么应用。

#include <stdio.h>
#include <sqlite3.h>
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
rc = sqlite3_open("zieckey.db", &db);
if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^ \n");
sqlite3_close(db); //关闭数据库
return 0;
}

退出,保存。(代码输入完成后,按下 Esc 键,然后输入: :wq ,回车就好拉)

编译:[root@localhost temp]# gcc opendbsqlite.c -o db.out
或者遇到这样的问题:
[root@localhost temp]# gcc opendbsqlite.c -o db.out
opendbsqlite.c:11:21: sqlite3.h: 没有那个文件或目录
opendbsqlite.c: In function `main':
opendbsqlite.c:19: `sqlite3' undeclared (first use in this function)
opendbsqlite.c:19: (Each undeclared identifier is reported only once
opendbsqlite.c:19: for each function it appears in.)
opendbsqlite.c:19: `db' undeclared (first use in this function)
这是由于没有找到头文件的原因。
也许会碰到类似这样的问题:
[root@localhost temp]# gcc opendbsqlite.c -o db.out
/tmp/ccTkItnN.o(.text+0x2b): In function `main':
: undefined reference to `sqlite3_open'
/tmp/ccTkItnN.o(.text+0x45): In function `main':
: undefined reference to `sqlite3_errmsg'
/tmp/ccTkItnN.o(.text+0x67): In function `main':
: undefined reference to `sqlite3_close'
/tmp/ccTkItnN.o(.text+0x8f): In function `main':
: undefined reference to `sqlite3_close'
collect2: ld returned 1 exit status
这是个没有找到库文件的问题。
[root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include

这样编译应该就可以了。最后运行'./db.out'可执行文件。

上一篇下一篇

猜你喜欢

热点阅读