ODB(C++ ORM)用Mingw的完整编译过程

用mingw官方的GCC4.7.2编译libodb后,并用odb compiler对hello示例生成odb的"包裹"代码,编译链接总是不能通过,下面是编译example/hello报错的信息如下: 
libodb-sqlite-2.3.0/odb/sqlite -o driver.exe driver.o person-odb.o  -lodb-sqlite -lboost_date_time -lboost_system -lodb 
libtool: link: g++ -I/d/odb-sqlite/sqlite-amalgamation-3080200 -mthreads -o .libs/driver.exe driver.o person-odb.o  -L/d/odb-sqlite/sqlite-amalgamation-3080200 -L/d/odb-sqlite/libodb-2.3.0/odb -L/d/odb-sqlite/libodb-sqlite-2.3.0/odb/sqlite  /d/odb-sqlite/libodb-sqlite-2.3.0/odb/sqlite/.libs/libodb-sqlite.a -lsqlite3 -lboost_date_time -lboost_system /d/odb-sqlite/libodb-2.3.0/odb/.libs/libodb.dll.a -mthreads -L/usr/local/lib 
driver.o:driver.cxx:(.text$_ZN3odb6sqlite11query_paramC2EPKv[__ZN3odb6sqlite11qu 
ery_paramC2EPKv]+0x1b): undefined reference to `_imp___ZTVN3odb6sqlite11query_pa 
ramE' 
driver.o:driver.cxx:(.text$_ZN3odb6sqlite10query_baseC1EPKcS3_[__ZN3odb6sqlite10 
query_baseC1EPKcS3_]+0x5f): undefined reference to `_imp___ZN3odb6sqlite10query_ 
base6appendEPKcS3_' 
d:/lbe/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: driver 
.o: bad reloc address 0x5f in section `.text$_ZN3odb6sqlite10query_baseC1EPKcS3_ 
[__ZN3odb6sqlite10query_baseC1EPKcS3_]' 
collect2.exe: error: ld returned 1 exit status 
make[1]: *** [driver.exe] Error 1 
make[1]: Leaving directory `/d/lbe/oscode/odb-sqlite/odb-examples-2.3.0/hello' 
make: *** [all] Error 2 

尝试多种方法不能解决,发现在odb compiler目录中自带一个mingw编译器,这个编译版本是GCC4.7.3的,gcc -v的输出信息如下: 
Using built-in specs. 
COLLECT_GCC=D:\wxwidgets\wxcode\odb-2.3.0-i686-windows\mingw\bin\gcc 
.exe 
COLLECT_LTO_WRAPPER=d:/wxwidgets/wxcode/odb-2.3.0-i686-windows/mingw 
/bin/../libexec/gcc/i686-w64-mingw32/4.7.3/lto-wrapper.exe 
Target: i686-w64-mingw32 
Configured with: ../gcc/configure --host i686-w64-mingw32 --target i686-w64-ming 
w32 --prefix=/mingw --with-sysroot=/mingw --enable-languages=c,c++ --enable-shar 
ed --enable-threads=posix --disable-libssp --disable-libgomp --disable-graphite 
--disable-multilib --enable-libstdcxx-time --enable-fully-dynamic-string --disab 
le-dw2-exceptions --enable-sjlj-exceptions --disable-libstdcxx-pch --disable-lib 
stdcxx-debug --disable-rpath --disable-win32-registry --disable-nls --disable-we 
rror --with-pkgversion='ODB special' --with-bugurl=http://www.codesynthesis.com/ 
products/odb/ --enable-static-plugin --with-stage1-libs=libplugin-stub.a CFLAGS= 
-O2 CXXFLAGS=-O2 LDFLAGS=-s 
Thread model: posix 
gcc version 4.7.3 20130209 (prerelease) (ODB special) 

而Mingw GCC4.7.2的gcc -v的输出信息如下: 

Using built-in specs. 
COLLECT_GCC=d:\mingw\bin\gcc.exe 
COLLECT_LTO_WRAPPER=d:/mingw/bin/../libexec/gcc/mingw32/4.7.2/lto-wrapper.ex 

Target: mingw32 
Configured with: ../gcc-4.7.2/configure --enable-languages=c,c++,ada,fortran,obj 
c,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgo 
mp --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1- 
with-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw 
Thread model: win32 
gcc version 4.7.2 (GCC) 

现在则使用odb compiler自带的mingw完成所有的编译链接过程,并记录编译的所有过程,

步骤是:

(1)编译sqlite

gcc -c sqlite3.c

ar crvs libsqlite3.a sqlite3.o

(2)编译libodb

./configure & make 即可

(3)编译libodb-sqlite

./configure CXXFLAGS=-I/d/odb-sqlite/sqlite-amalgamation-3080200 LDFLAGS=-L/d/odb-sqlite/sqlite-amalgamation-3080200 --with-libodb=/d/odb-sqlite/libodb-2.3.0

 

(4)编译libodb-example

./configure CXXFLAGS=-I/d/odb-sqlite/sqlite-amalgamation-3080200 LDFLAGS=-L/d/odb-sqlite/sqlite-amalgamation-3080200 --with-libodb=/d/odb-sqlite/libodb-2.3.0 ODB=/d/odb-2.3.0-i686-windows/bin/odb.exe --with-database=sqlite --with-libodb-sqlite=/d/odb-sqlite/libodb-sqlite-2.3.0

make
在example/hello下启动测试的程序,并用SqliteAdmin这个软件查看数据库文件中的数据,是正确的.

$ ./driver --database hello.db --create
Hello, John Doe!
Hello, Jane Doe!

count  : 3
min age: 31
max age: 33

时间: 2024-08-02 17:51:31

ODB(C++ ORM)用Mingw的完整编译过程的相关文章

makefile-codeblocks+mingw,msys编译pjsip

问题描述 codeblocks+mingw,msys编译pjsip 我使用的是win32下codeblocks,使用mingw/gcc编译器,我想要安装pjsip应该怎么操作,查找了很多的资料知道pjsip是支持交叉编译的,win32+mingw,但是我就是无法编译成功make[1]: execvp: make: Resource temporarily unavailablemake[1]: *** [depend] Error 127make[1]: Leaving directory '/

mingw/msys中编译boost及安装pkg-config教程

mingw/msys中编译boost 首先,当然是安装mingw了.安装非常方便,去网站上下载个mingw-get或者它的图形界面版,然后安装就可以了.不过,在安装过程中,很容易出现下载失败的情况,所以建议还是使用mingw-get这个命令行版本的比较好,失败了马上重新执行一边就可以了. 首先必须安装gcc和g++,使用mingw-get install gcc g++就可以了.这个命令怎么这么像debian的包管理器呢~ 安装好之后,再去下载msys的安装包.有图形界面,安装起来比较方便的,在

详解 Weex JS Framework 的编译过程

之前写了一篇文章<Weex 框架中 JS Framework 的结构>概述了 JS Framework 的整体结构,其中编译过程写的有些简略,这里再详细介绍一下. 一句话概括 JS Framework 的编译过程就是: 将 JS Bundle 转换成 Virtual DOM 发送到原生模块渲染. 这个过程涉及三种数据类型:JS Bundle .Virtual DOM .Vm . JS Bundle 是由 .we 文件转换过来的,会被视为代码而执行. Virtual DOM 是描述页面结构的 J

给jikes指定encoding属性的编译过程

编译|过程 jikes是一个比javac速度快的java编译器,它是IBM的一个开放源码项目 在一些Application Server运行时,我们为了提高运行的速度,会选择对jsp文件进行预编译,但是如果项目比较大的话,对于所有的jsp编译会花费很长的时间,所以这个时候需要选择一个快速的java编译器,据说Symantec的sj速度最快,但是目前好像没有继续开发,不支持jdk1.4以上了,所以我们选择稍次之的jides编译器,不过jikes没有提供对win32平台的encoding属性的支持,

iOS编译过程的原理和应用

前言 一般可以将编程语言分为两种,编译语言和直译式语言. 像C++,Objective C都是编译语言.编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率较高. 像JavaScript,Python都是直译式语言.直译式语言不需要经过编译的过程,而是在执行的时候通过一个中间的解释器将代码解释为CPU可以执行的代码.所以,较编译语言来说,直译式语言效率低一些,但是编写的更灵活,也就是为啥JS大法好. iOS开发目前的常用语言是:Objective和Swif

LFS编译过程必备辅助手册(一)

LFS编译过程必备辅助手册(一) 很多人对Linux进行了一定的学习之后,都会有一种自己从头搭建一套Linux的想法,在这方面LFS和Gentoo都是不错的起点.不过虽然它们已经尽量提供详细文档了,但对于初学者来说还是存在一定的困难的. 因此本站特邀 PHILO (@看见微软我就跑)和 米油 两位同学将他们自己学习LFS的经验分享给大家,也希望大家一起来参与到LFS之旅中. 前言 LFS(Linux from scratch)是从源代码开始编译Linux操作系统.如果需要深度定制Linux操作系

用户体验设计:Nearby Tweets改版的完整设计过程

UX Case Study: Designing a user-focused web appBrian Cray版权所有作者:Brian Cray译者:UCD翻译小组,波希米亚原文地址: http://briancray.com/2010/01/26/ux-case-study-designing-user-focused-web-app/ 这篇文章记录了Nearby Tweets改版的完整设计过程.Web开发者和商家期望借此获取些灵感.用户则更有兴趣找寻这些设计中所蕴藏的东西.当然,我希望能

WinCE系统的编译过程图解

在WinCE系统中,当我们完成了相关的开发和系统定制工作以后,会编译WinCE系统,最后生成NK.bin和NK.nb0.我现在用WinCE6.0在自己的PC上面编译一次用时19分16秒(有一天无聊,就测了一下).下面介绍一下WinCE系统的编译过程,大致分为4个阶段:编译阶段(Compile phase),系统产生阶段(Sysgen phase),文件拷贝阶段(Release copy phase)和生成映像阶段(Make Run-time image phase). 过程如图: 从图中可以看出

PHP编译过程中常见错误信息的解决方法

PHP编译过程中常见错误信息的解决方法 在CentOS编译PHP5的时候有时会遇到以下的一些错误信息,基本上都可以通过yum安装相应的库来解决.以下是具体的一些解决办法: checking for BZip2 support- yes checking for BZip2 in default path- not found configure: error: Please reinstall the BZip2 distribution Fix: yum install bzip2-devel