赞
踩
在开发板中移植mysql太麻烦(就是懒) ,故将需要用到的库移植到开发板中供给C语言程序使用。
最终实现效果:Exynos4412开发板连接阿里云数据库
1、官网下载
点击下载
2、百度网盘
链接失效可告知我
链接:https://pan.baidu.com/s/1AlOxQozi4TmDvlG6cxD5yA
提取码:j052
1、将其拷贝到ubuntu中,解压,查看目录下的文件
2、安装cmake
里头使用cmake工具进行配置,故需要进行安装
sudo apt-get install cmake
3、配置 CMakeLists.txt
在开头加入(靠前加入)
将其中的交叉编译工具改为自己的交叉编译工具路径
SET(CMAKE_CXX_COMPILER "arm-none-linux-gnueabi-g++")
SET(CMAKE_C_COMPILER "arm-none-linux-gnueabi-gcc")
4、使用Cmake进行配置
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=安装路径
1、直接进行make
错误1
error: static declaration of 'rint' follows non-static declaration
解决方法:将include/my_global.h中的rint函数注释掉即可
错误2
在编译到95%的时候出现各种未定义
erro:undefined reference floor
解决方法:在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; }
2、配置服务器端的mysql(需要配置允许远程连接)
3、编译
编译的时候需要加入参数 -lmysqlclient
4、在开发板上运行编译好的可执行文件
显示连接成功 并将test表格中的数据读出
至此,就可以在开发板上和远程数据库进行数据的交流了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。