当前位置:   article > 正文

嵌入式开发工具——交叉编译libmysql_libmysql 源码下载

libmysql 源码下载

前言

在开发板中移植mysql太麻烦(就是懒) ,故将需要用到的库移植到开发板中供给C语言程序使用。
在这里插入图片描述
最终实现效果:Exynos4412开发板连接阿里云数据库

一、libmysql源码下载

1、官网下载
点击下载
在这里插入图片描述
2、百度网盘
链接失效可告知我

链接:https://pan.baidu.com/s/1AlOxQozi4TmDvlG6cxD5yA 
提取码:j052
  • 1
  • 2
二、解压并配置

1、将其拷贝到ubuntu中,解压,查看目录下的文件
在这里插入图片描述
2、安装cmake
里头使用cmake工具进行配置,故需要进行安装

sudo apt-get install cmake
  • 1

3、配置 CMakeLists.txt
在开头加入(靠前加入)
将其中的交叉编译工具改为自己的交叉编译工具路径

SET(CMAKE_CXX_COMPILER "arm-none-linux-gnueabi-g++")
SET(CMAKE_C_COMPILER "arm-none-linux-gnueabi-gcc")
  • 1
  • 2

在这里插入图片描述
4、使用Cmake进行配置

cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=安装路径
  • 1

在这里插入图片描述

三、编译安装

1、直接进行make
错误1

error: static declaration of 'rint' follows non-static declaration
  • 1

解决方法:将include/my_global.h中的rint函数注释掉即可
在这里插入图片描述
错误2
在编译到95%的时候出现各种未定义

erro:undefined reference floor 
  • 1

解决方法:在Makefile中加入一个环境变量,将这些函数链接起来即可
在这里插入图片描述
解决上面的两个问题需要重新使用cmake进行配置,再make即可编译成功。
问题解决参考博客:点击进入(也是困扰了好久,可以去看看大神的分析-.-)

2、安装
2.1、进行安装 make install,发现其并没有按照之前的配置的安装路径进行安装(竟然安装到我的mysql中去),百思不得其解
在这里插入图片描述
最后找到一个配置安装路径的文件cmake_install.cmake
发现配置的应该是 /usr/local/mysql 是默认的配置路径(明明CMAKE_INSTALL_PREFIX已经定义) 最后直接将默认路径给改成自己想要的路径并重新进行make install即可
在这里插入图片描述
在这里插入图片描述
2.2、将安装目录下的include和lib中的文件拷贝到交叉编译器对应的文件夹中去,就可以愉快地进行编译了(lib中的文件还要拷贝到开发板的文件系统中的lib,程序在开发板中运行的时候才能找到对应的库)
在这里插入图片描述

四、程序测试

1、简单写了一个数据库的连接程序 实现将test数据库中的test表格中的数据输出。
程序中的主机地址和密码被我删掉了 改成自己的数据库主机地址和数据库root密码就可以使用

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "mysql.h"

#define MAX_BUF_SIZE 1024 //缓冲区最大字节数

MYSQL *g_conn;//mysql 链接  
MYSQL_RES *g_res;//mysql 记录集  
MYSQL_ROW g_row;//字符串数组,mysql 记录行

/*
	host
	name
	password
	db_name
	port
*/

const char *g_host_name = "";//主机地址
const char *g_user_name = "root";//数据库用户名
const char *g_password = "";//密码
const char *g_db_name = "test";//连接的database名字
const unsigned int g_db_port = 3306;

/*
	存放命令的缓冲区
*/
char sql[MAX_BUF_SIZE];
char Time[MAX_BUF_SIZE];

int iNum_rows = 0;//mysql语句执行结果返回行数赋初值  
int flag = 0;//管理员权限开关  
int i = 1;//系统运行开关  

/*
	打印错误函数
*/

void print_mysql_error(const char *msg)
{
	if(msg)
		printf("%s: %s\n",msg,mysql_error(g_conn));
	else
		puts(mysql_error(g_conn));
}
/*
	执行MySql语句函数
*/

int executesql(const char * sql)
{
	if(mysql_real_query(g_conn,sql,strlen(sql)))
		return -1;
	return 0;
}
/*
	初始化数据库连接
*/

int init_mysql(const char *g_host_name,const char *g_user_name,const char *g_password,const char *g_db_name,const unsigned int g_db_port)
{
	//初始化g_conn
	g_conn = mysql_init(NULL);
	//connection the database 
	if(!mysql_real_connect(g_conn,g_host_name,g_user_name,g_password,g_db_name,g_db_port,NULL,0))
		return -1;//链接失败
	return 0; //返回成功
}

int connect_db(const char *g_host_name,const char *g_user_name,const char *g_password,const char *g_db_name,const unsigned int g_db_port)
{
	if(init_mysql(g_host_name,g_user_name,g_password,g_db_name,g_db_port))
	{
		print_mysql_error(NULL);//当链接数据库时候 有错误 会报错
		return -1;
	}
	else
	{
		printf("Connect OK!\n");
		return 0;
	}
}

int main()
{
	int iNum_rows,iNum_fields,res;
	res = connect_db(g_host_name, g_user_name, g_password, g_db_name, g_db_port);
	if(res!=0)
	{
		printf("Can not connect!\n");
		return -1;	
	} 
	if(executesql("select  * from test"))
		print_mysql_error(NULL);
	g_res = mysql_store_result(g_conn); // 从服务器传送结果集至本地,mysql_use_result直接使用服务器上的记录集 
    iNum_rows = mysql_num_rows(g_res); // 得到记录的行数  
    iNum_fields = mysql_num_fields(g_res); // 得到记录的列数 
	while ((g_row=mysql_fetch_row(g_res))) // 打印结果集
      printf("%s\n",g_row[0]);
    mysql_free_result(g_res); // 释放结果集
	mysql_close(g_conn);
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105

2、配置服务器端的mysql(需要配置允许远程连接)
在这里插入图片描述
3、编译
编译的时候需要加入参数 -lmysqlclient
在这里插入图片描述
4、在开发板上运行编译好的可执行文件
显示连接成功 并将test表格中的数据读出
在这里插入图片描述
至此,就可以在开发板上和远程数据库进行数据的交流了
在这里插入图片描述

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号