sqlite3程序移植后出现BUS error

问题描述

程序如下,程序在Ubuntu上编译后能运行,但是用arm-linux-server编译后移植到ok6410上,运行后报buserror错误不对数据库操作的话,程序又是可以运行的,请教一下大神如何修改?具体点,本人菜鸟。应该是地址没有对齐的读写问题。#include<netinet/in.h>#include<sys/types.h>#include<sys/socket.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<sqlite3.h>#defineSERVER_PORT8000//服务端口#defineBUFFER_SIZE1024//缓冲区大小#defineFILE_NAME_MAX_SIZE512//文件名大小intselect_callback(void*data,intcol_count,char**col_values,char**col_Name);intsqlite3_z(intargc,char*argv[]);intmain(){//数据库函数char*argv[]={"","",""};sqlite3_z(3,argv);//声明并初始化一个客户端的socket地址结构structsockaddr_inclient_addr;bzero(&client_addr,sizeof(client_addr));client_addr.sin_family=AF_INET;//TCP/IP协议族client_addr.sin_addr.s_addr=htons(INADDR_ANY);//iner_addr("0.0.0.0")client_addr.sin_port=htons(0);//socket对应的端口//创建socket,若成功,返回socket描述符//AF_INET表示采用TCP/IP协议族//SOCK_STREAM表示采用TCP协议//0是通常的默认情况intclient_socket_fd=socket(AF_INET,SOCK_STREAM,0);if(client_socket_fd<0){perror("CreateSocketFailed:");exit(1);}//绑定客户端的socket和客户端的socket地址结构非必需if(-1==(bind(client_socket_fd,(structsockaddr*)&client_addr,sizeof(client_addr)))){perror("ClientBindFailed:");exit(1);}//声明一个服务器端的socket地址结构,并用服务器那边的IP地址及端口对其进行初始化,用于后面的连接structsockaddr_inserver_addr;bzero(&server_addr,sizeof(server_addr));server_addr.sin_family=AF_INET;if(inet_pton(AF_INET,"127.0.0.1",&server_addr.sin_addr)==0){perror("ServerIPAddressError:");exit(1);}server_addr.sin_port=htons(SERVER_PORT);socklen_tserver_addr_length=sizeof(server_addr);//向服务器发起连接,连接成功后client_socket_fd代表了客户端和服务器的一个socket连接if(connect(client_socket_fd,(structsockaddr*)&server_addr,server_addr_length)<0)//发起连接{perror("CanNotConnectToServerIP:");exit(0);}//输入要发送的文件名charfile_name[FILE_NAME_MAX_SIZE+1]={"test.csv"};printf("sendFileName:test.csvt");charbuffer[BUFFER_SIZE];bzero(buffer,BUFFER_SIZE);strncpy(buffer,file_name,strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));//向服务器发送buffer中的数据if(send(client_socket_fd,buffer,BUFFER_SIZE,0)<0){perror("SendFileNameFailed:");exit(1);}//打开文件,读取数据FILE*fp=fopen(file_name,"r");if(NULL==fp){printf("File:%sNotFoundn",file_name);}else{bzero(buffer,BUFFER_SIZE);intlength=0;//每读取一段数据,便将其发送给服务器,循环直到文件读完为止while((length=fread(buffer,sizeof(char),BUFFER_SIZE,fp))>0){if(send(client_socket_fd,buffer,length,0)<0){printf("SendFile:%sFailed./n",file_name);break;}bzero(buffer,BUFFER_SIZE);}//关闭文件fclose(fp);remove("test.csv");printf("File:%sTransferSuccessful!n",file_name);}close(client_socket_fd);return0;}intsqlite3_z(intargc,char*argv[]){char*pErrMsg=0;//错误存放地址intresult=0;//连接数据库sqlite3*db=0;intret=sqlite3_open("./test.db",&db);//打开数据库if(ret!=SQLITE_OK){fprintf(stderr,"无法打开数据库:%s",sqlite3_errmsg(db));return(1);}printf("数据库连接成功!n");if(freopen("./test.csv","w",stdout)==NULL)//重定向写文件fprintf(stderr,"errorredirectingstdoutn");sqlite3_exec(db,"select*fromtest_1;",select_callback,0,&pErrMsg);fclose(stdout);freopen("/dev/tty","w",stdout);sqlite3_close(db);db=0;printf("数据库关闭成功!n");}//数据库回调函数intselect_callback(void*data,intcol_count,char**col_values,char**col_Name){//每条记录回调一次该函数,有多少条就回调多少次,发送11条数据换行inti,j=0;for(i=0;i<col_count;i++,j++){if(j<10)printf("%s,",col_values[i]==0?"NULL":col_values[i]);else{j=0;printf("%sn",col_values[i]==0?"NULL":col_values[i]);}}return0;}

解决方案

时间: 2024-09-25 09:49:40

sqlite3程序移植后出现BUS error的相关文章

Cocos移植到Android的一些问题-SQLite3数据库移植问题

首选我们讨论一下SQLite3数据库移植问题.我们在第14章节介绍了在Win32平台使用SQLite3数据库我们介绍了两种配置环境的方法一种是使用Cocos2d-x提供的SQLite3库配置另一种是从SQLite官网下载源代码拷贝的工程中.第一种方法配置起来比较麻烦关键是Cocos2d-x提供的SQLite3库只是Win32没有其它平台的目录结构如下所示.<游戏工程目录>\cocos2d\external\sqlite3│  Android.mk│├─include│      sqlite3

嵌入式linux应用程序移植方法总结

前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩写的<CAPWAP移植进展.docx>对openCapwap的移植过程有了比较详细的描述,所以在此就不涉及技术细节了,本文档主要以openCapwap的移植为例,总结嵌入式linux应用程序移植的一般方法和步骤,为以后可能需要的移植工作提供一些的思路. 嵌入式linux应用程序移植的步骤包括: 1.准备好交叉编译环境 在安装有Linu

详解如何将Unix应用程序移植到Linux系统

介绍 您知道 Linux 现在已是世界第二的服务器操作系统吗?今天,您的应用程序在 Linux 上运行吗?如果不是,那么本文将给您些提示和技巧,在您把应用程序移植到 Linux 的时候为您提供指导.本文依据的是软件工程师的经验,这些工程师来自独立软件供应商(Independent Software Vendors,ISV)和全世界的 IBM 实验室,他们参与了许多把应用程序移植到 Linux 的项目. 首先我们描述 Linux 的特征和它在开发和管理应用程序中的具体价值.接着,我们将回顾重要问题

我想要保护设备中的程序,据我了解目前有高强度加密算法保护,还有的就是程序移植,哪种方案比较好呢?

问题描述 我想要保护设备中的程序,据我了解目前有高强度加密算法保护,还有的就是程序移植,哪种方案比较好呢? 我想要保护设备中的程序,据我了解目前有高强度加密算法保护,还有的就是程序移植,哪种方案比较好呢?目前成本有限,两种都支持的话成本太高. 解决方案 推荐使用加密,程序移植我个人不大懂,我理解的程序移植要更换编程语言到其他平台上去. 解决方案二: 如果考虑成本的话那肯定是加密了 解决方案三: 1 数据加密保护:程序段A 芯片 产生随机数Rnd 加密Rnd,获得Res 认证<-------Res

操作系统-rtems移植后的困惑,怎样装一个完整的rtems到虚拟机上然后可以有终端用来交互呢

问题描述 rtems移植后的困惑,怎样装一个完整的rtems到虚拟机上然后可以有终端用来交互呢 照着网上的一篇说明文档在ubuntu下搭建好了rtems的编译环境. 最后就是在ubuntu下编译了一个hello.exe(是rtems下的hello world程序) 然后将这个hello.exe作为虚拟机(qemu)的kernel image,启动虚拟机之后就打印了hello world,文档到这里就结束了 ---------------------------------------------

c-C語言 请教bus error 10,USACO Greedy Gift Givers

问题描述 C語言 请教bus error 10,USACO Greedy Gift Givers 代碼如下 /* LANG: C TASK: gift1 */ #include <stdio.h> #include <stdlib.h> #include <string.h> FILE *input_file, *output_file; int total_people, gift, numbers_of_recever, money_giving[9]; int s

低版本的c++程序移植到vs2010上

问题描述 低版本的c++程序移植到vs2010上 #if _WIN32_WINNT < 0x0403 #error This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended. #endif 解决方案 在stdafx.h加上#define _WIN32_WINNT 0x0501 (0501表示xp)

Android Studio 日历控件原码移植后不能显示日历怎么回事?

问题描述 Android Studio 日历控件原码移植后不能显示日历怎么回事? Android Studio 日历控件原码移植后,下面的日历月份都不能显示,程序没有报错,不知道是怎么回事? 解决方案 android 中的日历控件Android日历控件 解决方案二: 调试不要问这种没头没尾的问题,先检查日志,看看这个控件有没有输出什么提示,然后自己研究源码,调试显示部分代码

通过VS15将Win32应用程序移植到Windows 10

Project Centennial 使现有的Win32应用程序更容易迁移到Windows 10通用平台上(UWP),该项目是微软在应用程序迁移方面努力的一个代表.微软希望在桌面应用程序上Windows 10可以取代之前所有的Windows版本,但为了真正取得成功,他们需要在Windows 10上提供用户需要的应用程序.然而,由于传统的Win32平台不可思议的长久寿命,大多数开发商在当前的代码库有重大的投资,这让他们不愿意切换到UWP应用. 微软希望通过Project Centennial 能够