QQ在线服务: 风舞残阳风舞残阳 年满19岁年满19岁 小罗小罗 晴天晴天 心雨心雨 叮叮肉叮叮肉 小周小周 小童小童 小破孩小破孩 遥望当年遥望当年

用户导购指南

水货IBM笔记本电脑报价

行货IBM笔记本电脑报价

IBM服务器报价

IBM笔记本电脑配件报价

本周水货IBM笔记本电脑特价

IBM笔记本电脑驱动下载

水货IBM笔记本电脑验机流程

水货IBM笔记本电脑保修政策

IBM笔记本电脑FRU查询

IBM笔记本电脑常见问题

IBM笔记本电脑使用手册

笔记本电脑验机软件

论坛积分使用说明

水货IBM笔记本电脑异地购机流程

笔记本电脑购机经历及现场

贵宾申请入口

贵宾用户FTP入口

查看笔记本配置

水货APPLE苹果笔记本电脑报价

 
发新话题
打印

[linux教程] Linux下sqlite数据库移植全攻略

Linux下sqlite数据库移植全攻略

本文讨论的是比较流行的嵌入式开发组合ARMuclinux,即目标开发板为三星S3C4510,完成sqlite在其uclinux上的移植。
, ]( g& E! g  n8 P- M
0 b' a% N0 M% g  本文假设你已经具备正确编译uclinux的kernel的能力,即有能力完成makemenuconfig;makedep;makelib_only;makeuser_only;makeromfs;makeimage;make。而且还能将自己写的似helloworld程序加到“用户自定义应用程序”中,即你能完成“uClinux-dist/Documentation/Adding-User-Apps-HOWTO”中所描述的“用户程序的订制”。7 M  ~3 a1 Z' u  v" w' p

% ~/ W% t( C' ]2 K3 {' z4 q  大多数需要移植sqlite到uclinux的开发者,应该已经具备上面的能力,而只是不清楚如何修改sqlite来完成其在uclinux下的编译。如果你还不能完成上面的要求,那么请先做一定的准备工作,因为本范例所涉及到的内容主要是跟sqlite在uclinux下的移植有关,其他的在这个过程中出现的问题,开发者需要自行处理。# p# m: f# j( g1 m

$ i) ~  H% s; {( ]  本范例使用的uclinux是uClinux-dist-20030522.tar.gz,你可以从http://www.uclinux.org得到适合你的软件包。. [2 ]! {8 y: r$ y; H
  F5 u6 p8 J. T2 E  d; P& y1 O
  交叉编译工具是arm-elf-tools-20030314.sh,你也可以在http://www.uclinux.org找到它。
9 J/ _, I9 T2 ?. T0 o) g. k
( [% Z+ [4 y4 Z4 |9 U$ ^+ [6 v  本范例使用的sqlite是sqlite-2.8.15.tar.gz,本文的方法也适合于2.8.x系列的sqlite;可能有部分内容不适用于3.0.x系列的sqlite,因为3.0.x中源代码有较大的变化。
+ X% Z5 |3 G, E5 J2 s# i7 D
" G3 ?8 w: m! c: {6 V  1、下载sqlite:你可以到http://www.sqlite.org/download.html,下载sqlite-2.8.15.tar.gz软件包;7 C9 v8 R: `0 C! k9 Z' x
0 ^- L" ^) g/ n" r
  2、将下载的软件包解压缩到uClinux-dist/user目录下;7 E: ~6 e  z' K0 J( C% `! ^6 @$ `

: K* p' }1 a3 R" Q  命令:/ W6 M' y+ F# v& w" U
! D5 h- L' T7 y$ |
  $tarzxvfsqlite-2.8.15.tar.gz-CuClinux-dist/user/  c: ?/ `& d8 @5 S% X4 u7 F6 z1 W

2 d' ~/ E- ^  |* f  现在在uclinux的user目录下,你应该可以看到sqlite目录了。解压缩到这个user目录主要是要将sqlite编译成一个普通的用户应用程序。
' k3 l! W! p1 {8 }& P  u) @8 H' R2 L- B7 T% b# R1 X
  3、用户应用程序的有关设置:
6 g$ c8 t1 X2 O. K7 w/ s: `) Q
! \1 N1 `' x4 s3 r  按uClinux-dist/Documentation/Adding-User-Apps-HOWTO文档中说提到的,来添加sqlite作为一个用户应用程序,将其做成一个shell,这样就类似于uclinux自己的ps命令。& m/ c$ x( L' W+ w$ x
& Z7 V3 n; K( d+ T7 W
  编辑文件8 h' I" J, I4 ]0 `6 S
0 G9 T8 g$ M6 b( K+ h# |6 R7 k
  uClinux-dist/user/Makefile1 ?! U& a4 E* a, x/ I5 g2 x' R
: U! Y6 K( ~6 u3 J1 i2 C: q- n5 {
  uClinux-dist/config/Configure.help
8 H/ }2 U7 a  X! F0 ]9 B: }4 ]. Z" i6 f9 [' {/ D4 c) u
  uClinux-dist/config/config.in
% v3 x. u* T" i/ M- X" n  Y1 `  \
+ x# a. ?% |+ u3 a  我是在这些文件里查找“cpu”有关的项,然后在它的下面,加上自己的sqlite项,这个过程并不复杂。
9 E, G- Q# c5 G% `6 T$ M
* x& j9 L  C: F8 z/ B2 b3 W  通过上面的修改后,你现在就可以运行uclinux的makemenuconfig,选中“CustomizeVendor/UserSettings”,再选中“MiscellaneousApplications”,可以看到它现在出现了一个新的“sqlite(NEW)”,这个就是我们刚添加进去的sqlite项。$ L' u" k  Q+ i) K5 m! s. R

1 e8 k: W. |$ _0 E  在稍后的makeromfs中,uclinux会将你的sqlite编译进来,做成romfs的一部分,因为你在uClinux-dist/user/Makefile中已经加上要编译sqlite项了。这样在移植后的uclinux的/bin中将会有sqlite命令可以让你来执行。" r. _/ w0 T3 x# S$ O

8 U4 g6 v# F* ~: c* `6 N  好,现在我们就要对sqlite进行修改,来做移植工作。! @( G& a: v0 k( Z: M

( P; y& c5 }4 U5 M9 V8 n  在下面的描述中,我们将对以下几个文件进行一定的添加、修改,从而来完成sqlite在uclinux下的编译:' s2 ^4 i* e3 I# c6 E6 W

/ w& l/ Z0 Q3 w# R: q: ^/ V6 c. g4 E0 s  sqlite/main.mk修改
$ S6 U0 r5 I0 E6 |: y) ?; N* d
8 J: U6 J/ M! n9 _  sqlite/Makefile添加
& }  R/ |1 s$ s: C9 U* w
  G+ p' L5 ^; z5 C- v0 r  sqlite/src/os.c修改
$ r6 N( q8 f3 d! T/ n  b0 ^
# E+ j: A0 K( V8 Z/ k( Y% \: N  sqlite/src/shell.c修改2 d; y, G5 m) ~; Q2 }% \
. s6 R+ I1 q; z; K+ j" p0 E
  对这几个文件进行修改时,请自己做好这些文件的备份,比如你可以将它们拷贝一份,改名成文件名后面带.bak。这个很重要,可以避免你在修改的过程出现问题而无法还原。
4 P' M. w$ A& w  `
/ \% b8 f$ @6 _9 h  一、修改sqlite/main.mk3 ]4 W  p% _/ O* n; Y$ p: e0 b
6 P- N! {* j, a
  1、TCCX+ k: w, p; T- p9 ^  j
( N5 B( E, i5 T0 M. ~
  将0 e) ~! ~' U* e: S, H1 K$ V5 v
+ [" p6 c, p1 R; f0 y! f
  TCCX=$(TCC)$(OPTS)$(THREADSAFE)$(USLEEP)-I.-I$(TOP)/src
2 P3 E2 a& ]8 n% d; k$ T$ c7 l! Z3 p- }; O3 W! p
  修改为. {! z9 y" }* N9 d/ w: e! e# s
8 A3 D/ i5 P. o3 Z1 U6 u
  TCCX=$(TCC)$(OPTS)$(THREADSAFE)$(USLEEP)-I.-I$(TOP)/src$(CFLAGS)# N( p( r( v! k
* Y# I; U4 L5 E) D
  即加上$(CFLAGS)标记。
  n7 p" X9 S" o# \- _# \
5 C# S0 i+ X7 Q) x" f  A6 n3 J! O  2、LIBOBJ2 _: p+ Z# p8 V' E3 G( r6 @3 V9 `
! }3 q$ o, L1 m. u6 w- o. |
  找到#ObjectfilesfortheSQLitelibrary.# m. z+ b  e2 W7 m/ T* A
[color=#FFFFFF']& D8 W6 H8 j3 j- f; m' o
! l4 R  r) ]! t8 ~) m
! s: @+ u! ]1 f. L3 ]
  将其中的tclsqlite.o去掉。即去掉tcl有关的东西。
6 h+ @1 K5 f+ e8 e
9 X/ n- q" z. T  q6 M  如果没有tclsqlite.o,那么不用处理它。) c) A, l9 [' d

0 O2 A# E6 r" Y; {  3、sqlite$(EXE)8 W7 W( P6 U" b5 b% q! M7 t; }) w
& ?3 G9 n; T  D: K, `) J: ~: U
  找到类似sqlite$(EXE)的一句,将:+ i5 s. P+ V8 y1 ?! b1 `
4 M8 y9 {! |8 C- C7 p
  sqlite$(EXE)(TOP)/src/shell.clibsqlite.asqlite.h3 }7 ^9 j* C3 }4 q9 W

( }, L. L& e" v) v  $(TCCX)$(READLINE_FLAGS)-osqlite$(EXE)$(TOP)/src/shell.c\\\\\\\\/ y2 }' e; d/ h8 ?

" p- s9 \; w$ B5 z! Z) f! y) r% i  libsqlite.a$(LIBREADLINE)$(THREADLIB)
4 {" q6 I- Q5 ]9 ]. ~* q8 s- S9 J1 ~. x+ n8 F# d. K. Q8 r8 I/ L
  替换为:( n. I: J7 h# q! n: M/ ?
! p* J2 t! e; j: o" a
  shell.o(TOP)/src/shell.csqlite.h+ i: L5 |/ o- W3 i& g

9 |; f" H7 ~4 b& x9 z9 ~  $(TCCX)$(READLINE_FLAGS)-c$(TOP)/src/shell.c) N- j3 J6 K  s$ V
# U4 `. ], u9 j4 E
  sqlite$(EXE):shell.olibsqlite.a
: g% n( Z; B( S' U5 ]5 E. p! g4 [
  $(TCC)$(LDFLAGS)-o$@shell.o\\\\\\\\4 ]' _. k" x( n1 ~& w) u

3 d+ ^' k2 F* B5 A2 k! w  libsqlite.a$(LIBREADLINE)$(THREADLIB)$(LDLIBS)3 j0 e) l1 c  w* I2 J
9 M# B3 f% g0 x3 x( s) R
  即在sqlite$(EXE)上一行加上shell.o,及在其后加上$(LDLIBS)标记。这个是对/src/shell.c的编译方法的修改。* s, t2 T! a& ^3 \# m4 H

1 n; k3 t/ Z, U- r6 |+ g- [  4、romfs
7 U; b4 N$ P1 h4 q5 h% C
1 a3 B6 U, \/ [3 \) n  将:
- g& r1 c' j4 |( {: ^4 I
% r/ ^* Y# Q( v5 U- |: y  install:sqlitelibsqlite.asqlite.h
4 m, x3 |$ x- D  h; L5 F4 ?1 R
6 M1 n$ [: |% D- _  mvsqlite/usr/bin
( z; A0 A+ D4 b
" b' \$ H  M5 a$ z5 B( O  mvlibsqlite.a/usr/lib
" I! @5 V4 E! [9 D
  g6 c$ k) I0 e$ _  mvsqlite.h/usr/include/ p' b4 C# U' I7 z
. [, r3 S2 r. p+ L& Y1 T# _
  替换为:
. b* \7 n& h( Y* S/ N
: H+ r5 z3 Y) `6 e) Y: @9 u& j  romfs:sqlite! s1 {( r' p+ W' Q# T6 ?: P( S

& c- ?3 }# m0 X/ n1 F/ ]' i, I  $(ROMFSINST)/bin/sqlite
7 n& J: S% K: H- [/ C% o/ f+ u0 s7 y7 a; Q! A& r
  即去掉makeinstall项,加上makeromfs项。这个很重要,这将在romfs的/bin目录下生成sqlite。
$ i; Y. k& U. [, o+ O2 m# K0 t7 {; z; j5 a% U) g
  5、clean1 r& q( C, ?; M4 S
6 n  T. q0 m4 @+ C* T
  将:
  M. q3 \! \% P7 W, @3 C+ r- C
, M3 g6 w/ T  u  clean:1 b3 `9 Q$ ?; c
) E+ k2 @) R0 j1 e  b
  rm-f*.osqlitelibsqlite.asqlite.hopcodes.*
- p0 a3 z: ?# L) F2 ^' K# M: p
  h% e% z2 v  l  rm-flemonlempar.cparse.*sqlite*.tar.gz
7 b8 k; {1 Y# y; Y, _# a( Q1 r& F
. d* y( t, P% V. j& j) ]' L  rm-f$(PUBLISH)' [/ J. h. a. e! a2 ?: L* J0 Y4 V

0 J9 @5 W; N% e  rm-f*.da*.bb*.bbggmon.out
4 f* Y2 S4 c" l1 `0 T
2 [1 P/ P7 K% D6 S9 \  rm-rftsrc替换为:
- P' J, K( P& g6 ^2 ?
8 r6 }2 [' Q4 T: o$ }  clean:* Z: k, @% O* v6 ?! _" ^6 S( |

. ~8 }' [7 {$ m' X  rm-f*.osqlitelibsqlite.asqlite.hopcodes.*sqlite.gdb/ U! L4 R: Q1 A8 J* z7 B/ q
9 `  `, q9 {/ @- U0 F
  rm-f$(PUBLISH)$ f& l4 g, {* d( z
' t, _4 d0 O2 \5 C; m/ e' O
  rm-f*.da*.bb*.bbggmon.out
1 f& n4 X2 V" X1 D+ D# f1 U: U8 x6 a0 Y9 c. ?! ^
  rm-rftsrc# k9 ?8 z& Q2 X

% Z3 }) t" t; v2 D  distclean:clean
( p# {1 w' n+ I3 _0 A
& n: J2 [) E8 ~+ R: H  rm-flemonlempar.cparse.*sqlite*.tar.gz9 A% s& R# K- T$ z1 [: ], R. j: u

6 n  p% {% |% x! x  rm-fconfig.h$ v" J4 k# U% R. n$ O3 |

( e7 x$ e6 Q0 v) _- T  即增加makedistclean项。热门推荐:谈超频的概念及方法2004年十大热门显卡超频王% L4 V* C3 Z/ o6 D& P7 G
  S4 a& T3 T/ m
  123
! I/ U& L8 }8 V# x
2 d) Y( E# Q( s" u9 d# a/ Y0 E/ Q8 Y1 [8 a5 J) ^. |- n! b6 t* A$ e8 ^  D

& c: @' y$ L5 P7 |  _2 O
( }& i5 u) }% D% o; f) \/ k
6 i3 M0 \* X/ {# v6 H  K) u, [0 Z4 g4 ?/ e1 N: m' o

8 k$ i/ p  p3 |$ n9 @9 F' \; V9 U; A2 m4 W

! D5 K9 N! p  q) J5 v
% {5 t8 Q* |* Y- ^
8 w+ q1 x/ r& Q. C" b" Q7 i' ]9 L: v7 `" q0 n
  二、在sqlite下增加Makefile文件
. E% i" `* A+ e* s
: J" Q, ~/ Z  v1 j  在sqlite目录下应该没有Makefile文件,而只是有一个sqlite/Makefile.linux-gcc文件。我们要移植sqlite到uclinux,那么就要自己写一个合适的Makefile。+ M5 P3 v* `( h# |" ]3 {

, N( @6 h7 v1 A: l  内容如下:! m9 L9 C: s& z2 }" B2 [# n1 D) M

6 [+ W7 ^& f6 z7 I/ Y4 M* C, b  ===========Makefile内容开始===========
$ v. O$ O4 F* r3 i
# w" n! ~6 u5 e3 X# f1 l  #!/usr/make8 ^/ m$ |* o* `

6 N, u  T9 p& x) i0 ~* m3 D* y; V3 `( B  #0 i+ X! V8 ^- p8 @6 C4 g; g

# ]+ i9 i: E0 D) G! P. U  #MakefileforSQLITE
3 l  c( Y# Z  t) x- x  v  ^7 w3 y
' R. G& a( E$ U7 ^/ \$ N  #9 R3 K* o/ x* d* u

. M( x0 N# F6 E8 \' I/ S5 m2 o  #ThisisatemplatemakefileforSQLite.Mostpeoplepreferto/ C& ]3 Q/ t) E: a  k
( `! K; \; O- p3 q
  #usetheautoconfgeneratedconfigurescripttogeneratethe
  J$ L! X! ~4 G/ k, ?$ G8 v. S* B8 V
  #makefileautomatically.Butthatdoesnotworkforeverybody
- q. Y+ Z; B2 T' Z- I: R$ p# j. x8 X
  #andineverysituation.Ifyouarehavingproblemswiththe2 M& K& `1 g  S2 v; j
1 @2 Y6 O, t2 H' ~8 i
  #configurescript,youmightwanttotrythismakefileasan5 h0 J! v. ?% a+ |0 r$ x

9 `0 b8 P5 F$ r2 X3 m1 B" f9 ^' p6 I  #alternative.Createacopyofthisfile,edittheparameters
- Y0 M# z% X; s  k3 S
: i  C- W; X  P7 P8 \; k7 z$ z  #belowandtypemake.
0 J% k6 W/ U2 y" K- d* Q6 J- I$ |; N9 u1 C. K: m4 M
  #
  e: h2 o! L( N( D( u$ f( y' m) q
) n9 l, w' I% B) |3 C  ####Thetopleveldirectoryofthesourcetree.Thisisthedirectory
- O# h" ~7 W* J
7 t" H' k) Y: z' R( b. M/ B$ f  #thatcontainsthisMakefile.inandtheconfigure.inscript., K/ ?( t* l, I  K) X
0 }" w  M7 F9 |5 K
  #* `7 X+ A* u3 U" s4 W4 r
' P# D  M. V/ W* E. p, T7 [: G
  TOP=.
, ]% S/ p! ~5 d& w! N$ x8 r
# J. ^3 T* {8 m  k! W5 T6 _0 x' [  ####CCompilerandoptionsforuseinbuildingexecutablesthat  V+ G3 ^6 L: _

! K0 d9 F4 V! ?$ h. Z  #willrunontheplatformthatisdoingthebuild./ l; }6 e( H4 [& d6 c4 m; Z( x

$ i) ~% M& l) y3 v7 f/ A0 g# z  #1 d2 f: o3 B$ u' a1 a. d2 O

0 w' c& z8 p3 b: l1 s  BCC=gcc-g-O2
, p) L& S% m- `- B' x5 l5 P: m# g" {5 Y8 ?
  #BCC=/opt/ancic/bin/c89-04 w5 v7 m  q: o5 _2 V

8 U& F7 D2 @! [+ v  ####Ifthetargetoperatingsystemsupportstheusleep()system1 J* @7 D6 i7 ]2 J* ]2 `' O' L
1 i  x; \' f% T1 G0 a
  #call,thendefinetheHAVE_USLEEPmacroforallCmodules./ V2 z. K9 K" C, k/ C$ R
' y: g6 k$ E$ M4 X) u* {' y  S+ P2 z8 M
  #' I* o& Z( r3 S; _) v
) Z$ s. |9 i" E# J* Z
  #USLEEP=
/ W- W3 Y6 Y$ R
- T: f* I, W0 z* ~9 D6 d' k  USLEEP=-DHAVE_USLEEP=1
, |# U# @& H5 d
$ E) S& t- k; a$ G( F" h  ####IfyouwanttheSQLitelibrarytobesafeforusewithina& }* l/ `0 o" X: o) l$ ^  P1 Z

* x! |9 o  j# D8 B% V! I% n1 m' w+ a  #multi-threadedprogram,thendefinethefollowingmacro# P  k( p9 E! R5 D4 L# v: U

# x: W+ K9 g/ `5 {0 W$ X& {' v  #appropriately:
0 V; P# D- W  w$ U( m  t9 |! V5 o/ m) _0 v( J
  #6 K( W( F  Z4 q; `% t  i
0 M5 Y& g. ?0 d0 O
  #THREADSAFE=-DTHREADSAFE=1
$ ^; ?9 j3 ]' e4 M/ b/ E; V
* u5 |" ?% j' W) ]  THREADSAFE=-DTHREADSAFE=01 d8 s+ w$ T( g5 L

9 u# r$ P9 \# o7 ]. c  ####Specifyanyextralinkeroptionsneededtomakethelibrary6 x% M& e& Q, }* l+ h

3 x  k  ^/ k) B  #threadsafe( b6 M( l0 _9 K) J

/ w: d3 s$ T' }5 P* q- ]& B/ s  #" Y: _  J; ?% L8 K# x# C6 D
# A9 T$ `5 v# e5 V
  #THREADLIB=-lpthread
( K+ x, q7 O" e
) Y9 h- t$ \4 j+ u* R" o  THREADLIB=& L* N. X# v* ~2 z. W
( [& F! [+ P1 m2 U$ N$ w9 |! n
  ####LeaveMEMORY_DEBUGundefinedformaximumspeed.UseMEMORY_DEBUG=1
4 i' x$ m6 `! N) n1 C8 D8 E, t7 Z1 P; l8 O# \+ A4 v
  #tocheckformemoryleaks.UseMEMORY_DEBUG=2toprintalogofall
9 {7 x9 ?. d$ b! R7 H1 v+ g3 a9 q0 K, p/ D  v/ m
  #malloc()sandfree()sinordertotrackdownmemoryleaks.
( v7 U' i5 L; Y; j, }5 d, G! O) j$ P7 I: Z4 \  B* @
[color=#FFFFFF']2 w: O1 l1 Y! }! t2 Q' D
- [/ z5 @. q$ {  s6 E
  #) e6 A$ f, v, a1 I

3 r& n  [. F6 _" b' _  #SQLiteusessomeexpensiveassert()statementsintheinnerloop.2 K5 g3 ?- X5 ?& _/ t) ~
4 o% g. l& b) a
  #Youcanmakethelibrarygoalmosttwiceasfastifyoucompile
! l" w9 y/ |6 @$ j0 Q& H
8 T/ p( Q, T$ P: D" X, I' M( L  y- z  #with-DNDEBUG=1
" ^% c8 q7 H% A0 Q2 S
3 g$ K% G  t: z3 v  #
0 ^9 K8 ^* V: ~# X$ b* Y7 S. f* ~
  #OPTS=-DMEMORY_DEBUG=2
  f2 g6 K# X1 a! ?
+ ~  f+ |4 y5 k! M  #OPTS=-DMEMORY_DEBUG=17 R6 S$ N4 R+ n* v4 ]' C8 |

7 Z* A2 B) H) \4 h  #OPTS=-DNDEBUG=1
  ^( m: ^7 I+ a. R6 s+ \1 @" x3 V3 Z0 r! l8 n( ^
  OPTS=-DMEMORY_DEBUG=1
7 M8 I3 A! H$ l, \+ W- G  \" P* F  N* ]
  ####Thesuffixtoaddtoexecutablefiles..exeforwindows.
$ A( j8 j& z( j/ d9 X* M
$ p4 K1 z1 U& h# C; o" }  #Nothingforunix.1 @; J7 F( ~" z4 I

# W3 o9 @8 d7 r4 h# e" E9 m* |  #
( |( e& d4 A1 V! t3 v! C& {+ w2 I7 n: B' j6 s$ y* P
  #EXE=.exe& m( B2 y) `* g* W

& m2 I1 S- C4 t3 x( h  EXE=/ p5 }4 J1 U$ g/ M, \" n
; F4 K3 U$ N9 y" {8 w
  ####CCompileandoptionsforuseinbuildingexecutablesthat
& w, j! d( b6 |  @, @' g" ], @9 `% \
  #willrunonthetargetplatform.Thisisusuallythesame5 F9 k6 ]* T0 M1 Y& n% h4 C
# H7 J, E  [1 p7 ~% s9 Z* J5 B2 N
  #asBCC,unlessyouarecross-compiling.
3 t" o7 _4 A; ~1 ?/ C7 o- y# e9 X' k
  #
# K. U+ y0 o  g1 G
% r5 Q* ?+ f4 e! i4 m; J  TCC=$(CROSS)gcc
1 F# x$ `2 B; [' I+ h- _, n: u/ f0 T1 l3 {  V  {- B
  FLTFLAGS=-s120009 Z% X* Q3 _" ~4 R( f* l
* C8 [0 g' E' ]# ]
  #TCC=gcc-g-O0-Wall, ~0 u2 O1 O: o6 |5 u7 T" e3 l& d

9 T& o  E; l, r  #TCC=gcc-g-O0-Wall-fprofile-arcs-ftest-coverage' r  @: T, x3 J% x1 k6 ^
" d  n+ Z# A/ J, A3 z) }5 m0 n1 Y
  #TCC=/opt/mingw/bin/i386-mingw32-gcc-O6' ^; @' H; Q7 ?4 G) l

+ K: W( @6 Y" ~# z8 u& m/ k& ^6 V  #TCC=/opt/ansic/bin/c89-Oz-Wl,-a,archive
7 n- m- U2 F9 o, ]0 P" N
) ?! l& r9 M4 H4 ]" k  ####Toolsusedtobuildastaticlibrary.
2 e: `: t* x9 e7 }[color=#FFFFFF']
, c& \5 e  g. L* m2 t) M* R* U
: \, Y2 e1 J" ]; @9 h9 J" W* |  j, j4 @
* w, R0 Q3 O$ N& M  M' n9 d9 u  #
; G6 _3 |8 Q  E. j$ i0 W& U( h" a( S* b8 K6 Q% F6 F
  AR=$(CROSS)arcr
5 s6 `# n; E' D; y8 q3 K# z  i
1 B# i$ ^. J$ z  #AR=/opt/mingw/bin/i386-mingw32-arcr
4 `6 E# t3 @. l" z/ `7 y9 ?
! p* h2 E6 Y9 ^) R7 d- |7 q& L  RANLIB=$(CROSS)ranlib2 d& t  S( z) ]: `: y

3 [! p: L5 W- c+ _, P3 N  #RANLIB=/opt/mingw/bin/i386-mingw32-ranlib/ k  q1 ?. ]3 p% c, E
" c8 u! J7 P" \" N8 J' b+ r
  ####ExtracompileroptionsneededforprogramsthatusetheTCLlibrary.
# g, ~; j# H/ O8 Z/ x1 n3 E- l, C* j* r
  #
) J% T' W- U% Z) H4 {3 Y
3 H, \* Z4 u3 K  #TCL_FLAGS=
- _- w/ }3 y8 z. {: a* `) C
; m' t6 H  O9 p  #TCL_FLAGS=-DSTATIC_BUILD=1" g' N8 P% h( q$ K9 r
! Y4 c5 u$ z5 `) b$ o
  #TCL_FLAGS=-I/home/drh/tcltk/8.4linux
( [4 \! {, e. p& b4 g* ~9 f5 x# C* p- {- \. r( Q8 g
  #TCL_FLAGS=-I/home/drh/tcltk/8.4win-DSTATIC_BUILD=1" M* ^) W/ {  W6 u" n
. J. R9 G1 u8 E7 t+ R( ]& G
  #TCL_FLAGS=-I/home/drh/tcltk/8.3hpux
6 b  y' A6 O% U6 X0 j# K# x+ O# G. H. e9 f8 \0 K
  ####LinkeroptionsneededtolinkagainsttheTCLlibrary.# h  j0 h9 O6 C

) R, D# ?3 a8 r: u  #
% q+ c  @2 g; f+ ?6 Z/ o0 L: t, b# t8 h6 u. D2 s7 M
  #LIBTCL=-ltcl-lm-ldl
! F1 b9 S, {5 H$ E* ^: }
+ }9 R1 J) e8 x! H6 K, M  #LIBTCL=/home/drh/tcltk/8.4linux/libtcl8.4g.a-lm-ldl
, W8 y' Y: ^6 c4 x, M, U! H) o
$ c! `  S6 g" G- \  #LIBTCL=/home/drh/tcltk/8.4win/libtcl84s.a-lmsvcrt+ a: [6 X  ~$ U4 A/ ]) R2 ~
% w1 @0 h8 M$ L- g& T6 a* d
  #LIBTCL=/home/drh/tcltk/8.3hpux/libtcl8.3.a-ldld-lm-lc; O2 v3 E2 K( m4 ^8 n  N
8 f' E0 Q# X& w
  ####Compileroptionsneededforprogramsthatusethereadline()library.
6 h) H% A) r- b  S7 N
  p4 I! o7 m  _1 v1 N' g- y  #
- |8 p( d, g! }: `0 U; N0 }4 t# Z6 T2 H' ]6 a, l1 y
  READLINE_FLAGS=; H' v8 J- Z- I/ \$ h

% k" @9 ~! U) [. Q; b  #READLINE_FLAGS=-DHAVE_READLINE=1-I/usr/include/readline
" k8 A2 w; l: }( G4 ~. _# o[color=#FFFFFF']
+ o2 C# I, r( z% ]8 D4 j8 }
8 L; b" _* k) w1 Z8 [' _2 _! \% f" [' _' V- G3 q' Q6 ]
  ####Linkeroptionsneededbyprogramsusingreadline()mustlinkagainst.
! c3 Z# n: A4 Q( X* o1 ~: n
4 |/ F; E; {+ Q  |( V. V2 |, m1 z  #
  g1 F" z4 J  d$ [/ y4 U- q" q6 s
  #LIBREADLINE=
2 ~; j" b" E% R$ g  p7 O7 ~8 w4 a# e0 v6 s1 i! g
  #LIBREADLINE=-static-lreadline-ltermcap
2 O, G/ w  l& h2 M5 t; B1 A" G% u  @# w6 E* S! L* o0 O
  ####ShouldthedatabaseengineassumetextiscodedasUTF-8oriso8859?
) l) [' I' ^( X, _4 [$ `; X
) W6 D+ R4 N) Q  #
" y" B+ w, ]7 c9 Q* p" |! O' Q, m: c* x8 J% d1 e( W5 O1 C
  #ENCODING=UTF84 J! i) |& [( o9 h9 @

1 q, D  ?7 o. K) r% b  H- }! L$ c  ENCODING=ISO88591 l: u7 r) b+ d9 y7 y. k

  K% x. X' X: T! R0 B8 B9 n  #Youshouldnothavetochangeanythingbelowthisline9 r+ u  D2 b5 h0 x' Y$ A- s0 o" x" B

. C' I, C  G: Q  ###############################################################################, u5 l  @: q& l# @/ o

+ h& u8 P/ j. P( P: J3 p  include$(TOP)/main.mk
9 V  |# Z( V8 w; Z* M3 g8 G/ v' x
  ===========Makefile内容结束===========9 e. V: o7 u$ ^7 M6 F) Q$ q! ^  x
. r3 r: d0 I8 R! s7 ^7 H
  注:5 K) H4 v# c! b1 m
% Z: v3 M, q! o6 Y/ A
  1、在uclinux下的sqlite的Makefile将不去用到TCL相关的库。- m" Y$ I/ B0 \0 n' D; v

% ^! B7 x( \, l; d0 Q- N2 p. _  2、在uclinux下的sqlite的Makefile将不去用到readline()。
1 Z1 o; }9 b! s; b, G2 S' ]# ?
& D* y+ q+ g! m  在sqlite/README中有关于Makefile的一段描述:
1 u7 u# I7 y3 l; l! f3 r1 Z/ G) u( y3 ]+ |( s
  Theconfigurescriptusesautoconf2.50andlibtool.Iftheconfigurescriptdoesnotworkoutforyou,thereisagenericmakefilenamedMakefile.linux-gccinthetopdirectoryofthesourcetreethatyoucancopyandedittosuiteyourneeds.Commentsonthegenericmakefileshowwhatchangesareneeded.
+ Q+ i+ o4 P$ Q7 d! Q- Q# l) T/ B' F# d
  你可以用sqlite/Makefile.linux-gcc作为蓝本来修改适合你自己的Makefile。+ {% |. r  D4 A: e4 @

0 z. b8 @' E* _5 A$ z/ \  你如果有兴趣的话,可以把上面的Makefile的内容和sqlite/Makefile.linux-gcc内容diff对比一下,看看uclinux下的sqlite编译有哪些不同的地方。# g2 g/ n& f0 b" i
) |. O5 Q3 U& Y& r
  三、修改sqlite/src/os.c) ~* w/ G5 |, u2 d/ [! ^, v/ x
) n/ j+ F  T; `
  如果你的sqlite包中包括os.c文件那么就对其进行修改,没有os.c文件可能是你的sqlite版本比较新,那么无须修改。
' W- y0 n( e& n
# D% P- p$ [) K& H  将所有你找到的:
% e0 s: w9 P( A3 j0 i
* X- C* \. H' c0 t, G3 f  用:
8 @' I3 n, x' A, d) B! J" z& G  U6 e" C0 y  x: X- x
  替换。热门推荐:谈超频的概念及方法2004年十大热门显卡超频王; {" L9 S8 R, q/ k+ M
+ J  D, h$ Y9 x( b5 w1 e" T' z
  123
" q( s+ _4 C3 l0 H2 X& F5 ]  d. I6 s* r3 j6 G+ m+ I; W5 ?

+ K2 k( o! u# C+ F1 \4 `6 X7 P9 P5 _, G% Q$ `
- l2 n+ t% w  j9 J2 `0 h
7 _3 g/ y3 i0 ?( B* `5 G/ [

. F" D7 O/ Q$ m$ o' t% e2 q1 F
  R, [- P4 b. q6 Y; B8 O4 t
# H5 P; G5 E* E( l" ]
8 Z# n6 E2 O0 d8 L( ]
2 x) C+ A* |" n& c' ]
7 P& D! I! [4 q: }
, R9 x  P! N. k& p* W) }- G) n0 k$ t) u) Q
: a/ {, d; n) T5 L  U
  四、修改sqlite/src/shell.c
& ]+ e; x+ a$ ]  }) z; ]" a" B2 Q9 Z0 P; C# h1 V
  1、structprevious_mode_data结构定义项:
; ^* ], O7 U' L( K4 l7 ~+ i
2 f( S: q. N) f( s9 F" {6 N7 a  将intcolWidth100;
0 [; ^+ y, ~: h* I8 @& o
* A$ w( E& b) l! i1 R) J1 \  用intcolWidth20;
0 P+ d+ j  Y$ C  U9 {- h" w8 J
5 P$ N: G0 G. l2 r3 W+ ?  替换。: J4 t' w; i7 O9 J

9 v; h; X  F6 g% H. A  2、structcallback_data结构定义项( R3 a0 Y, d4 ^( j
[color=#FFFFFF']/ D' A" o& ~4 K, K
# @9 r5 M0 @  d: W* _2 ~

' l7 b5 v) r& @  将:
# r, X( J4 N3 o' V/ F* d6 E" S
  y: z8 r* ?  l4 a3 o5 {7 n  intcolWidth100;
$ ~1 r5 W+ K9 q& h
1 d. Z2 G+ S# @% A' o7 Y2 V  intactualWidth100;. {+ ^, E0 j& X" w" j2 S3 T; I
& q& U9 N- Z) j
  charoutfileFILENAME_MAX;
" ]3 Z5 _* X) O7 a) m- b/ m% u: B2 I* w+ |- S
  用:5 B1 e7 I9 J3 @! q0 P/ `  D6 ?

( ^: f% ]) L( A7 n  intcolWidth20;
4 I% F8 D# \; U2 P% l
( i4 j9 D2 _$ `5 M  D  intactualWidth20;- a# F* {+ t/ k5 x

/ ^0 Q# h+ Z/ J: o) e' r3 }2 o  char*outfilep;
1 a; J2 Y' h  d# o! X$ A# l6 N1 o5 P+ q
  对应替换。$ K8 ?! Z2 Z1 U  ~
% f9 B6 N% m2 L( r" h) V* P
  再在结构下面增加:3 L4 o4 S5 m3 I2 Y0 p
! \) ^  N4 R" y4 w$ ]! _  U
  #ifndefFILENAME_MAX
! `9 p% q" w6 W: L2 J) H
  P' a( U! z5 D5 A  #defineFILENAME_MAX4095
& [0 Y0 {4 J0 w( F
8 f8 ]1 b% v4 _; A' q8 a4 r  #endif% t+ B) E  ?! h5 m6 E' B
8 I& M, Z5 n# _1 l& ^; C+ w- K
  charoutfilenameFILENAME_MAX;/*Filenamefor*out*/
4 R; X  T5 d8 s/ G8 K
; b6 ~; w* W( v$ w3 q7 |1 o  即
9 o& d" ?0 U5 F3 C) w" F# b) Q0 T7 q8 `
  structcallback_data
2 E5 s0 z- z8 ]: j" T% |$ w& s: W  N
  ...
6 i3 z" n. Q! F: X& |1 p0 `, u3 K) R8 e, Z" l. G
  ;  V* E9 f3 W6 Y! O' G( G
5 }: Z0 y0 A2 G( P/ t
  #ifndefFILENAME_MAX8 r% b# i7 Y3 S, v  a8 o

% O. ?  \- @4 X( g0 H8 |( L  #defineFILENAME_MAX40958 s3 n7 w  x+ m: F: \  N+ {; d" A7 M

- N0 \7 d. Z% [+ v5 \  #endif
6 U) n! i# [# n: C- [% W6 O
4 ^. f0 X( K6 R& }/ ]  charoutfilenameFILENAME_MAX;/*Filenamefor*out*/
2 M: N4 Q2 q5 a- S! e
6 N; C" Q, x$ {6 G0 H( s  3、函数do_meta_command(...)
( ^+ I1 B9 {) m$ L
, U. v" B! |. S* S7 W  J. q0 l  找到类似这样的一句:
+ h; j# [9 J+ o, l+ c' ?/ ^/ i9 j8 H
  sqlite_exec(p-%26gt;db,PRAGMAdatabase_list;,callback,%26;amp;data,%26;amp;zErrMsg);* c% a" k% d# w# [, Q
) M+ S2 T9 o1 E" a% n7 c0 G
  在它的前面有一句
# H8 @* S5 b3 c) v+ i- y9 E1 s4 d2 B: _" o3 w
  memcpy(%26;amp;data,p,sizeof(data));$ q  C" N) R) [1 B) F
& Y' H- B4 A, @2 B2 G/ p& E+ j
  现在在memcpy下面增加一行% Z! j& [: i+ N" n' C9 i
5 t* a+ |1 ?3 N2 ?
  data.cnt=0;
6 q7 U: x' y( H6 w0 v! W( c# G/ @3 @9 d7 }8 D$ S
  即将结构中cnt的值赋为0;
8 F- i. N: b4 F) h; S; s$ J/ D
3 ~. m) f1 {3 b% R- ?  A4 s9 C  现在代码会被修改成类似:6 H7 w7 y7 C. ?: [8 t
7 x: h- L4 B# `7 v- J8 W
  open_db(p);+ d5 N6 q4 l) q
[color=#FFFFFF']& [2 @6 @9 o/ I* G$ n

! e- h  ^" L+ t7 Z6 _% M0 h0 k' |5 _" o) n
  memcpy(%26;amp;data,p,sizeof(data));
# k9 K; u4 W/ Y$ S
7 F( V; s9 n% q" N  data.cnt=0;2 `$ [1 k& {% b, o. A( |; f
8 e* Z: S, S4 ?( K$ T3 w% U7 h
  再继续。5 f4 r* F. t" E
3 x7 y# D/ K% K7 u
  找到类似这样的一句:
. e. Q% V* t1 n9 v# P1 d+ p1 G$ K; |! B8 X( z/ K8 D
  strcmp(azArg1,stdout)==0
" r* I  T9 L; I) @; ^. K4 S, B  k8 A, q2 I% }
  在它的下面的括号中:2 q( j1 Y) x2 _+ X. K

( W& o) L7 l& J, u. S1 A* K! W  将strcpy(p-%26gt;outfile,stdout);
$ ]7 `3 Y5 }. k3 _+ W8 @, ^% @- y4 G! S1 g
  用p-%26gt;outfilep=stdout;2 C3 i2 H+ A" l/ a7 e9 T
2 O: ^0 |; l9 w7 D
  来替换。
& B* x2 ?; G4 ^
* d% S8 _! `1 g0 H- n' b$ [  再在它下面的5-6行处. Q, F' z- L. M; I

& v/ ?! E9 B9 `2 l  将:
  G$ h7 r" M# a0 ?- k% l. }- [* B5 J7 K. S+ b8 G
  strcpy(p-%26gt;outfile,azArg1);- Q6 s% x  |8 z6 W- ^

; w+ a& e+ y. q' W' x% X! u' H1 i  用:# |7 g/ q" h: Z  t
; n% S5 g7 Y6 g  r
  strcpy(outfilename,azArg1);* Z# Z- t3 F6 z0 o/ w5 ^$ e

( }* J9 }/ K6 x. Z  p-%26gt;outfilep=outfilename;
* {; M% H) C! {( C, s& Q$ _: @; x/ u" d  q+ I
  替换。
8 |$ r* J6 _$ v! H, I# }! u
8 D$ a+ U' d. x9 h  再继续,找到类似这样的一句:; h4 v! m* A6 y; k) I! C

; l4 k2 X; e- |: y* b8 |! S  fprintf(p-%26gt;out,%9.9s:%s\\\\\\\\n,output,
5 i2 D" H; p, P) G2 Q, _1 }' \+ a' l; K7 }. ^0 o1 _
  将:6 F( V$ y# b* `7 r, Q6 g+ J

; |+ K6 A: p! O' ]& K+ s6 f3 X# m- k  fprintf(p-%26gt;out,%9.9s:%s\\\\\\\\n,output,strlen(p-%26gt;outfile)?p-%26gt;outfile:stdout);7 y7 E2 t8 E# ?; x+ j  Q
* f& t: \9 d$ p+ M& t/ l% D# {' U3 y
  用:0 d. H! G3 Y6 J  m# H; m+ ?% s

/ h4 X3 k  o0 g# o8 M; o$ k  fprintf(p-%26gt;out,%9.9s:%s\\\\\\\\n,output,p-%26gt;outfilep%26;amp;%26;amp;strlen(p-%26gt;outfilep)?p-%26gt;outfilep:stdout);
  N1 u) d' e: Y  K
/ P; N0 q5 l2 k9 [( X( j! x  替换。
+ h! g3 m: o. T. }( _
9 j" V! \* n9 t) I; M! d  完成修改。% T' {+ S( H% }3 Z- Y! o7 K

) _& B  d: T& E  上面的所有的对sqlite的修改完成后,你就可以makedep;makelib_only;makeuser_only;makeromfs;makeimage了。, A& p3 R8 z7 I: I; C
# k0 `! Y. G; Y3 Y
  如果你对sqlite的修改,在makeuser_only过程中出现错误的话,你可以忽略makedep;makelib_only命令,直接再次进行makeuser_only;makeromfs;makeimage;就可以了,而不用重复makedep;makelib_only。+ a- y3 O3 \8 ]2 `3 d
+ ~5 ]: O# ^/ I3 H4 y* v
  makeimage会帮你生成romfs文件系统。现在在uClinux-dist/images下面就有编译生成的romfs文件系统了。这个就是我们需要的包含有sqlite的romfs了。6 H# D4 V1 \. S

3 \5 p; S! r' Q7 c  在上面的过程中,你可以不用在“makeimage”后再去“make”生成kernel内核,因为你只需要生成romfs就可以了,它里面已经有sqlite了。) L" G8 O1 v" e& M5 x- F& n- N

, I. {& J7 z: L  现在你就可以把你生成的含有sqlite应用程序的romfs下载到开发板上运行一下。- _/ W  V  N+ }# a& ]

* w; |) W. ~) l7 q) L( p  Welcometo
; L; n7 V! T' _1 J
9 S% Q# f/ o3 d: U  ______5 T, v3 u, S. }' e- L* v! n9 W

* y! _- `& C2 ]8 z. o+ Y+ s7 p2 t  /___
" W# P: \- B: k1 {6 E$ [8 S4 A8 f. @+ D
  ___________6 L3 x! h2 G; B' W

: O  E& B1 g3 o! q, q$ [+ B  _\\\\\\\\ \\\\\\\\\\\\\\\\//
; @+ I  i8 n1 F3 p; R; v; e% e* n
. q, a; E3 r* i  _ ___ /\\\\\\\\1 A; x4 f9 E6 Q+ B9 O4 O* U
0 m& ~% _1 H1 }9 e
  ___\\\\\\\\____ __ _ _ \\\\\\\\____ \\\\\\\\_/\\\\\\\\_/8 J$ N1 R7 Q) B% F/ q' `
3 S& e4 d  Y2 G& \
  _
3 v* p9 k  |. i0 y
" A1 t% ~1 Q, R. v& v  GDB/ARMulatorsupportby
9 l0 y4 U& o4 z& {
: {* ~0 @5 z& v" ^5 d  Forfurtherinformationcheck:
4 F9 _1 A. L% b7 A" O; U# V
, c5 f6 C% N# V9 N8 B' ~  http://www.uclinux.org/; p$ y, X9 I3 M6 V; U

* t7 v& z; _8 a  Command:/bin/ifconfigeth0up10.0.0.2
; o5 Y0 {4 O1 }, P5 k" y. _+ G1 D; h, u- `7 C1 D( O' N# F3 [
  ExecutionFinished,Exiting
' B9 ?, t0 x. I2 u- z6 }  ~- I$ }: v( `( }" r: D4 P
  init:Bootingtosingleusermode
- D& V) k9 `. Y* j- u( V: N" c7 G# ^4 c- J. e1 y- j6 [$ j2 P
  Sashcommandshell(version1.1.1)
* |! q! f- q8 s  B% [: [7 m6 l0 k- X0 y, f! Z  e% m
  /%26gt;cdbin- \6 x5 j! s) _: ?+ D$ j
  _( u) k; g. X5 A$ e+ A
  /bin%26gt;ls-lsqlite8 E5 D( X0 ?9 w0 R
7 `8 H) ~7 Q6 L, F, d1 e
  -rwxr-xr-x100327072Jan0100:00sqlite& c& P% W; J0 D1 V! g

6 P' m4 @0 A- u/ \[color=#FFFFFF']# d4 e, K8 o& f& |( ?1 K

. b; q1 Y( _, ?/ Q& O: k; p  /bin%26gt;cd/tmp9 `1 M4 M' R5 y6 P( |2 _

/ T. W5 u- s6 e; R( e3 F  /tmp%26gt;sqlitetest.sqlite
* f( X8 \: s# G. e% g& T4 v9 `" G  r, O
  sqlite%26gt;createtablemy(namevarchar(80),numsmallint);
0 K0 I' V1 Q$ k
) M  i  [; z" h$ ]; i! [; ^* {  sqlite%26gt;insertintomyvalues(yutao,100);& a2 l: `6 j8 I4 H

9 |& g; Q9 y: I0 T' g  sqlite%26gt;insertintomyvalues(uclinux,99);
2 i% G- a  r' J6 D# U4 a- I
  N. o9 K7 n1 L! c. Q  sqlite%26gt;select*frommy;6 \  E! E) K2 D0 x2 y2 r
2 Z1 x0 B' e4 ~$ G3 T. t
  yutao 1007 b" _$ w( }3 l9 |# u
- u+ G' N/ e; d3 \; B; {
  uclinux 99
' G8 R' V0 X4 t3 Z  L! }
$ b  h3 [6 K2 I  sqlite%26gt;.tables, H/ o* w2 E8 r, J" l) M1 d
) w$ H* l+ _; M; \- g  `
  my$ G* U' |0 `- Q  ~* Q

4 c4 c- z5 N: j3 n4 U- c  sqlite%26gt;.schema
% q" x: h0 M, v5 @# q* L' s4 X! \! y% h5 ^: q
  createtablemy(namevarchar(80),numsmallint);" H$ ~0 z) p! w" x# h9 _- h2 `6 l

: p) x! X# p6 b; k  z  sqlite%26gt;.q
& M1 U$ ~. f" H( v4 w6 i7 }+ ]5 X
" Q' a; [# m+ M- i  W  /tmp%26gt;lsCltest.sqlite
" }. {3 b; Q- {  R
8 j5 B. o5 z9 Y+ V1 w$ F  你要保证你的/tmp是可写的目录。- ~: R- \. P7 `
5 r7 n& F! x4 i7 \, O
  好,现在你的sqlite就已经在uclinux运行起来了,感觉如何呀,在uclinux也可以玩玩“select*from”,感觉很爽吧。/ b* C6 g* o& }/ L7 M& q
8 f& t* T5 H- v
[color=#FFFFFF']
(※本文搜集自:重庆未来科技 http://www.wlkj.net 重庆IBM笔记本电脑、重庆IBM水货笔记本电脑、重庆苹果笔记本电脑、重庆IBM服务器专卖)

TOP

******请登陆论坛查看内容******

(※本文搜集自:重庆未来科技 http://www.wlkj.net 重庆IBM笔记本电脑、重庆IBM水货笔记本电脑、重庆苹果笔记本电脑、重庆IBM服务器专卖)
这是赤果果的灌水呐
What good would wings be
if you couldn't feel wind on your face

TOP

发新话题