main.cpp

#include<stdio.h>
#include<stdlib.h>
#include"mysqlInterface.h" int main()
{
CMysqlInterface mysqlObj;
mysqlObj.connect();
return ;
}

mysqlInterface.h

class CMysqlInterface
{
public:
CMysqlInterface();
~CMysqlInterface();
int connect();
private:
MYSQL* mysqlPtr;
};

mysqlInterface.cpp

#include"mysqlInterface.h"

CMysqlInterface::CMysqlInterface()
{
printf("CMysqlInterface\n");
mysqlPtr = NULL;
mysqlPtr = mysql_init(NULL);
if(!mysqlPtr)
{
printf("mysql_init failed\n");
}
} CMysqlInterface::~CMysqlInterface()
{
mysql_close(mysqlPtr);
mysqlPtr = NULL;
} int CMysqlInterface::connect()
{
int iRet = -;
mysql_real_connect(mysqlPtr,"localhost","root","csql","child",,NULL,);
if(!mysqlPtr)
{
printf("connect failed\n");
}
else
{
printf("connect success\n");
iRet = ;
}
return iRet;
}

Makefile:

Makefile文件
test : main.o mysqlInterface.o
g++ main.o mysqlInterface.o -o test -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient main.o:main.cpp
g++ -c main.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient
mysqlInterface.o : mysqlInterface.cpp
g++ -c mysqlInterface.cpp -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient .PHONY:clean
clean:
rm -f main.o mysqlInterface.o test

执行结果:

make

g++ -c main.cpp  -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

g++ -c mysqlInterface.cpp  -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

g++ main.o mysqlInterface.o -o test -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient

./test

CMysqlInterface

connect success

程序运行成功

Makefile升级版:

src = $(wildcard ./*cpp)
obj = $(patsubst %.cpp , %.o , $(src))
target = test
CC = g++ $(target) : $(obj)
$(CC) $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient %.o: %.cpp
$(CC) -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient .PHONY:clean
clean:
rm -f $(obj)$(target)

文件解释:

src = $(wildcard ./*cpp)

扩展通配符:搜索指定文件。

这句话代表的意思是再当前目录下搜索所有的 .cpp文件并赋值给变量 src。函数执行结束后,src的值就是 main.cp 和 mysqlInterface.cpp

obj = $(patsubst %.cpp , %.o , $(src))

patsubst,替换通配符,按照指定规则做替换。

此行代码的意思的是将src里的每个.cpp文件 都替换成 .o文件赋值给 obj变量。

这句话还可以替换成obj = $(src: %.c = %.o) //也是将src里的每个文件都是.c替换.o

Makefile再升级:

src = $(wildcard ./*cpp)
obj = $(patsubst %.cpp , %.o , $(src)) target = test
CC = g++ $(target) : $(obj)
$(CC) $(CFLAGS) $(LDFLAGS) $(LIBS) $(obj) -o $(target) -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient %o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@ -I/usr/include/mysql -L/usr/lib/mysql/ -lmysqlclient .PHONY:clean
clean:
rm -f $(target) $(obj)

遇到的bug:

obj = $(patsubst %.cpp , %.o , $(src))

%.cpp,%.o不能有空格

如果有空格,那obj的值还是.cpp文件,不会转化为.o文件

%o: %.cpp

如果%.o少了,会报mysql.h找不到的错误
In file included from main.cpp:3:0:

mysqlInterface.h:2:18: fatal error:
mysql.h: 没有那个文件或目录

#include"mysql.h"

^

compilation terminated.

成功版本:

CFLAGS := -g
target := test
INCLUDE = -I /usr/include/mysql
lib = -lmysqlclient
dirlib = -L /usr/lib/mysql/ src = $(wildcard *.cpp)
objs = $(patsubst %.cpp,%.o,$(src)) all: $(target) %.o: %.cpp
#g++ $(CFLAGS) $(INCLUDE) $(lib) $(dirlib) -c $< -o $@
g++ $(CFLAGS) $(INCLUDE) $(lib) $(dirlib) -c $< -o $@ $(target) : $(objs)
g++ $(CFLAGS) $(objs) $(dirlib) $(lib) -o $(target) $(INCLUDE) .PHONY:clean
clean:
rm -f $(target) $(obj)

如果make的文件名是Makefile或makefile,直接执行make

如果是别的,比如Makefile1,就可以执行make -f Makefile1

执行结果:

exbot@ubuntu:~/wangqinghe/MySql/20190621/01/01$ make -f Makefile1

#g++ -g   -I /usr/include/mysql -lmysqlclient  -L /usr/lib/mysql/  -c main.cpp -o main.o

g++ -g   -I /usr/include/mysql -lmysqlclient  -L /usr/lib/mysql/  -c main.cpp -o main.o

#g++ -g   -I /usr/include/mysql -lmysqlclient  -L /usr/lib/mysql/  -c mysqlInterface.cpp -o mysqlInterface.o

g++ -g   -I /usr/include/mysql -lmysqlclient  -L /usr/lib/mysql/  -c mysqlInterface.cpp -o mysqlInterface.o

g++ -g  main.o mysqlInterface.o -L /usr/lib/mysql/  -lmysqlclient  -o test  -I /usr/include/mysql

程序运行结果;

exbot@ubuntu:~/wangqinghe/MySql/20190621/01/01$ ./test
CMysqlInterface
connect success

linux环境下写C++操作mysql(二)的更多相关文章

  1. linux环境下写C++操作mysql(一)

    /***************** connect.cpp g++ connect.cpp -o connect -I /usr/include/mysql/ -L /usr/lib/mysql/ ...

  2. DBA 应该要注意Linux 环境下的一些操作

    DBA 对OS的依赖.一丁点儿也不亚于DB.对于Oracle DBA.尤为突出     DB和OS的感情也与日俱增.耦合度高的让人一度以为这两要劳燕双飞了 例如.Oracle里面. 而且.故障诊断以及 ...

  3. Linux 环境下安装 Nginx+php+mysql 开发环境

    一直以来都没有养成记录学习的好习惯,我想从这么一天开始,把自己学习和工作中的经验和坑都记录下来.等到以后老的时候还有可以回忆的地方. 最近在学习linux,虽然已经玩linux很久了,但是没有怎么用心 ...

  4. oracle11G在linux环境下的卸载操作

    1.使用SQL*PLUS停止数据库[oracle@OracleTest oracle]$ sqlplus logSQL> connect / as sysdbaSQL> shutdown ...

  5. 阿里云服务器 :Linux环境下搭建Apache+php+mysql

    以前我用的是Windows2012 的服务器,那时候只是抱着玩一玩的心态,所有用的是Windows,但是后来被导师给DISS了,于是决定改服务器的操作系统: (一)下载安装php+mysql+apac ...

  6. 在linux环境下搭建JDK+JAVA+Mysql,并完成jforum的安装

    参考链接: YUM安装MySQL和JDK和Tomcat:http://cmdschool.blog.51cto.com/2420395/1696206/ http://www.cnblogs.com/ ...

  7. Linux环境下没有权限操作文件或目录

    linux下有超级用户(root)和普通用户,普通用户不能直接操作没有权限的目录,如果出现了没有权限的提示,可以尝试用su命令解决. 比如: #mkdir aaa 我要创建一个aaa的文件夹,没有操作 ...

  8. eclipse环境下,java操作MySQL的简单演示

    首先先通过power shell 进入MySQL 查看现在数据库的状态(博主是win10系统) 右键开始,选择Windows powershell ,输入MySQL -u用户名 -p密码 选择数据库( ...

  9. linux环境下mongodb启动操作

    pkill mongod 进入mongo shell :运行 db.shutdownServer() 1.进入mongo的shell  : mongo --port 1008 2.进入bin目录下 m ...

随机推荐

  1. vue组件添加事件@click.native

    1,给vue组件绑定事件时候,必须加上native ,否则会认为监听的是来自Item组件自定义的事件 2,等同于在子组件中:  子组件内部处理click事件然后向外发送click事件:$emit(&q ...

  2. 使用mvn archetype:generate快速建立Maven项目目录结构

    1.mvn archetype:generate  按照提示进行选择,默认选的话可以直接按回车键 2.mvn archetype:generate -DgroupId=组织名,公司网址的反写+项目名 ...

  3. Java Web开发技术教程入门-数据库

    补更:阅战阅勇第六天 今天阅读了这本书的第六章-访问数据.首先,这本书讲解的是MySql数据库,它是一个关系型数据库管理系统,是由瑞典MySqlAB公司开发,目前属于Oracle旗下公司.在web应用 ...

  4. VS Code 配置碰到的问题

    VS Code 呈现缩进参考线以及语法高亮改变 找到 首选项——>设置→搜索renderIntentGuides→将此选项改为true(默认为false),就可以了.

  5. Hadoop大数据平台入门——HDFS和MapReduce

    随着硬件水平的不断提高,需要处理数据的大小也越来越大.大家都知道,现在大数据有多火爆,都认为21世纪是大数据的世纪.当然我也想打上时代的便车.所以今天来学习一下大数据存储和处理. 随着数据的不断变大, ...

  6. 红色警戒2CE修改教程

    在大学的时候特别喜欢玩游戏,尤其偏爱单机游戏.在玩一些单机游戏的时候,特意使用了一些修改工具.本来是打算做成一个系列的,但是现在由于时间问题,仅介绍一些.(大概包括rimworld,饥荒,放逐之城,缺 ...

  7. CentOS7搭建FastDFS V5.11分布式文件系统(一)

    1.绪论 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家分享一下.FastDFS的作者淘宝资深架 ...

  8. lambda中FirstOrDefault和First

    First()表示取集合中的第一个元素,如果集合为空,则抛异常. FirstOrDefault()表示取集合的第一个元素. 如果集合为空,且集合元素是引用类型,则返回null. 如果集合为空,且集合元 ...

  9. RouterOS Firewall v6 流程图

    1. Firewall v5和Firewall v6对比图 2.Firewall v6的流程图

  10. dedecms 调用所属栏目的二级栏目列表

    include\taglib\channel.lib.php 在 else if($type=='self') { if($reid==0) return ''; $sql = "SELEC ...