环境:

开发板:freescale 2.6 armv71,系统只读,唯一可以读写的路径是/tmp/sd(这是一个sd卡)。程序放在/tmp/sd/transfer下(下文以运行路径代替),sql语句以文件形式保存在开发板上,语句字符集是GBK。

服务器:服务器安装的是SQL SERVER 2008。

功能:程序能够连接上服务器的数据库,执行SQL语句等等。

考虑到开发板的sd卡容量有限,不便于安装编译器,于是决定交叉编译。

交叉编译环境:ubuntu 12.04 (也可以选择其他的)。待编译的transfer.c和transfer.h文件放在/home/arm下(下文以编译路径代替)

首先安装交叉编译器,去官网下载最新的arm-linux-gcc。

我使用的是arm-linux-gcc-4.4.3-20100728.tar.gz,下载之后解压即可使用(我解压到了/home/下)。

为了使用方便,将解压目录下的opt/toolschain/4.4.3/bin添加到系统环境变量中。

为了访问SQL SERVER,我们需要安装freetds。当然这个freetds编译出来的动态库也必须是要在开发板使用的,所以要使用交叉编译器编译

去官网下载最新的freetds-stable.tgz.tgz,下载完成后解压,然后进入解压目录

执行以下命令

./configure  --prefix=/home/freetds-arm --sysconfdir=/tmp/sd/transfer --with-tdsver=7.1  --enable-msdblib  --disable-libiconv  --host=arm-none-linux-gnueabi

解释下各项参数的意义。

--prefix=/home/freetds-arm ,设置freetds安装的目录,考虑开发板上是只读的,所以最好自己手动指定链接库路径而不采用默认路径。另外个原因这是ubuntu,而编译出来的是arm版本的。

--sysconfdir=/tmp/sd/transfer ,如果确定SQl语句不使用中文,可以不要这个参数。这个参数设置freetds配置文件的路径。(默认是在prefix指定的路径下的ext文件夹)。为什么要单独把参数文件夹设定为/tmp/sd/transfer,下面再讲

--with-tdsver=7.1 ,设置tds协议的版本,适用于SQL SERVER2008。其他版本请自行修改版本号

--enable-msdblib,允许MS(微软)数据库连接,因为还有其他数据库使用tds协议。

--disable-libiconv,关闭字符集自动转换(不关闭的话会中文乱码)

--host=arm-none-linux-gnueabi,指定交叉编译器(如果之前没有设定系统环境变量的话这里要手动指定编译器路径)

然后

make

make install

解决中文乱码

freetds连接默认是采用ISO-8859-1编码,是不支持中文的。在freetds安装目录下的ext文件夹(如果使用--sysconfdir,就在其指定的路径下)里有个freetds.conf,可以设置连接字符集。方法是在[global]条目下添加一行client charset=GBK(假设你的sql语句是GBK格式的,其他格式请使用对应的字符集)。

不过在板子上使用异常,莫名其妙程序崩溃。后来查看freetds源代码,发现默认支持UTF-8。

于是首先将client charset=GBK改为client charset=UTF-8,然后将SQL语句从GBK格式转换成UTF-8格式即可

这里使用libiconv来进行转换(还用其他方法,请参考网络)

要包含头文件iconv.h

void GBK_To_UTF8(char * src,int srclen,char * dsc,int dsclen)
{
iconv_t cd;

cd = iconv_open("UTF-8","GBK");

memset(dsc,0,dsclen);

iconv(cd,&src,&srclen,&dsc,&dsclen);

iconv_close(cd);
}

当然libiconv也得使用交叉编译

首先下载libiconv-1.14.tar.gz,解压之后进入解压目录

./configure --prefix=/home/libiconv --host=arm-none-linux-gnueabi

make

make install

参数含义不多做解释,参考上文。

安装完成从安装目录找到libiconv.so.2.5.1,复制到编译目录并改名为libiconv.so.2

从安装目录下找到iconv.h,复制到编译目录下

编写Makefile文件如下

CC=/home/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc
CCD=gcc
FLAGS=-Wl,-rpath=/tmp/sd/transfer -I/home/freetds-arm/include/ /home/freetds-arm/lib/libsybdb.a librt.so libiconv.so.2
FLAGSD=-I/home/freetds/include/ /home/freetds/lib/libsybdb.a -lrt -liconv
transfer : transfer.c transfer.h
$(CC) -o transfer -g transfer.c $(FLAGS)
debug : transfer.c transfer.h
$(CCD) -o transferd -g transfer.c $(FLAGSD)
clean :
rm -rf *~ transfer transferd

执行make就可以得到transfer,这个是要放到板子上用

执行make debug就可以得到transferd,这个直接可以在ubuntu上用,方便调试

为了方便在ubuntu12.04使用gdb调试,增加了debug目标,freetds等的安装方法参考上文,只需要去掉--host=arm-none-linux-gnueabi。

解释下

FLAGS

  -Wl,-rpath=/tmp/sd/transfer表示程序执行的时候优先从这个路径寻找依赖库,如果不使用此项,会报libiconv.so.2找不到。

  -I/home/freetds-arm/include/这里指定freetds的头文件路径

  /home/freetds-arm/lib/libsybdb.a指定freetds共享库路径

  librt.so 这个是运行时库,需要从开发板拷过来,也可以从交叉编译器的安装目录下找到。(执行命令find / -name "*librt.so*" 即可找到)

  libiconv.so.2 这个是libiconv的库

FLAGSD,由于本机都是装在/usr/lib下面的,所以直接使用-lrt连接librt.so,-liconv连接libiconv.so.2

最后

将编译目录的libiconv.so.2、transfer放到板子的 /tmp/sd/transfer下

将ubuntu的/tmp/sd/transfer/freetds.conf拷贝到板子/tmp/sd/transfer下

这样transfer就可以执行了

开发板远程操作SQL SERVER解决方案的更多相关文章

  1. [转]C#操作SQL Server数据库

    转自:C#操作SQL Server数据库 1.概述 ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlComman ...

  2. 远程操作 SQl server2008新建角色和数据库

    远程操作 SQl server2008 1.windows身份登录,安全性-->登录名(右键)-->新建登录名:yc ,密码111111-->点选sql server身份验证--&g ...

  3. PHP操作SQL Server 2008/2012

    PHP操作SQL Server驱动,微软官方提供2个版本,Version 2.0 和 Version 3.0 Version 2.0 版本支持的操作系统有: Windows Server 2003 S ...

  4. 使用php来访问操作sql server

    使用php来访问操作sql server 在此分成三步走: 第一部:查看配置,下载文件 首先查看自己的php和sql server版本 Php文件输入echo PHP_VERSION  运行脚本就可以 ...

  5. Navicat 远程连接SQL Server 2014 Express 报08001错误

    场景:Navicat 远程连接SQL Server 2014 Express 报08001错误,经查验防火墙端口1434,1433已经打开 过程:1. 一开始觉得是连接名称问题,使用IP地址或者主机名 ...

  6. SQL Server学习之路(七):Python3操作SQL Server数据库

    0.目录 1.前言 2.准备工作 3.简单测试语句 4.提交与回滚 5.封装成类的写法 1.前言 前面学完了SQL Server的基本语法,接下来学习如何在程序中使用sql,毕竟不能在程序中使用的话, ...

  7. Nodejs 操作 Sql Server

    Nodejs 操作 Sql Server Intro 最近项目需要爬取一些数据,数据有加密,前端的js又被混淆了,ajax请求被 hook 了,有些复杂,最后打算使用 puppeteer 来爬取数据. ...

  8. 数据库SQL Server2012笔记(七)——java 程序操作sql server

    1.crud(增删改查)介绍:create/retrieve/update/delete 2.JDBC介绍 1)JDBC(java database connectivity,java数据库连接) 2 ...

  9. Python 学习笔记:Python 操作 SQL Server 数据库

    最近要将数据写到数据库里,学习了一下如何用 Python 来操作 SQL Server 数据库. 一.连接数据库: 首先,我们要连接 SQL Server 数据库,需要安装 pymssql 这个第三方 ...

随机推荐

  1. JPA,EclipseLink 缓存机制学习(一) 树节点搜索问题引发的思考

    最近在项目在使用JPA+EclipseLink 的方式进行开发,其中EclipseLink使用版本为2.5.1.遇到一些缓存方面使用不当造成的问题,从本篇开始逐步学习EclipseLink的缓存机制. ...

  2. [SoapUI] 在SoapUI里用Java语言判断Excel单元格为空或者Null时出错

    我取Excel数据时先判断cell是否为"": if(cellValue != ""){     listNumber.add(i);     cellValu ...

  3. 一个View的子类实例化

    View子类的实例化.如果是在activity中通过findViewById的形式实例化,那么它的具体的构造函数是什么呢,看看父类View的源码就容易发现是 通过这个构造函数实例化的 public V ...

  4. 可靠UDP

    tcp为我们做了什么事情? 总得来说,tcp做了这几件事: 通过序列号和基于确认的超时重传机制,为上层提供了可靠的字节流服务: 通过滑动窗口.拥塞窗口提供了流量控制: 默认情况下,为了有效利用带宽,t ...

  5. 个人学习随笔(psi-blast随笔)

    psi-blast学习 最近自己学习了一些新工具,最近在学习关于蛋白质相互作用位点的预测,在学习中,接触了几个新的工具,下面说说自己正在学习的psi-blast. 首先要说我用psi-blast用来做 ...

  6. 19个必须知道的Visual Studio快捷键(转)

    本文将为大家列出在 Visual Studio 中常用的快捷键,正确熟练地使用快捷键,将大大提高你的编程工作效率. 项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Al ...

  7. Android Studio 如何切换sdk

      选择File-->Project Structure 弹出框中选择Project 看到中间的Project SDK项. 点击Edit或者New 然后就可以选择Build target 和Ja ...

  8. 关于jQuery事件绑定

    转自:http://www.cnblogs.com/gaojun/p/3497582.html html: <a href="#" onclick="addBtn( ...

  9. 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...

  10. 矩阵k次幂 采用三重循环

    #include<iostream> using namespace std; int main() { int n,k; ][],b[][],c[][]; while(cin>&g ...