用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 
e 
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

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

  1. C语言的编译过程、安装gcc编译器以及设置环境变量

    以我对C语言编译过程的了解,我用了一点时间画了一个图,提供给大家参考一下,希望有些能对您的问题提上帮助. 前几天刚初步学习了C语言的编译过程,感触挺深的.在C语言中头文件其实起了一个很大的作用. 1. ...

  2. [译]C++, Java和C#的编译过程解析

    1.1.1 摘要 我们知道计算机不能直接理解高级语言,它只能理解机器语言,所以我们必须要把高级语言翻译成机器语言,这样计算机才能执行高级语言编写的程序,在接下来的博文中,我们将介绍非托管和托管语音的编 ...

  3. (四) openwrt单个ipk编译过程

    Tags : Makefile 本周是成胖子每周一博的第五周. 更好的阅读体验,请点击这里 [TOC] 前言 前一篇博客中,我们已经知道整个openwrt的编译顺序,本文我们来探讨与开发者息息相关的单 ...

  4. (二)我的Makefile学习冲动&&编译过程概述

    前言 一 年轻的冲动 二 学习曲线 1 Makefile基本语法 2 bash基础 3 world 三 编译过程概述 1 主机预装工具 2 编译host工具 3 编译交叉工具链 4 编译内核模块 5 ...

  5. 搭建OpenWrt开发环境(包括编译过程)

    OpenWrt是一个高度模块化.高度自动化的嵌入式linux发行版,其编译和安装过程比普通的linux发行版而言,要简单太多了.如果您是新手,您那恐惧的心大可放到肚子里,呵呵.对于新手来说最麻烦的恐怕 ...

  6. Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程

    Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程   在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...

  7. C/C++, Java和C#的编译过程解析

    原文地址:http://www.cnblogs.com/rush/p/3155665.html 1.1.1 摘要 我们知道计算机不能直接理解高级语言,它只能理解机器语言,所以我们必须要把高级语言翻译成 ...

  8. .NET 代码编译过程

    作为一种代码指令平台,Microsoft .NET比微软公司先前推出的其他技术平台要来得更为复杂.由于.NET提供了对多种编程语言以及(在理论上说)多重平台的支持,这就需要在传统的两个代 码层添加一个 ...

  9. Linux C程序的编译过程

    Linux C程序的编译过程 学习一门语言程序,本人觉得还是得学习它的编译规则,现在,通过小例子小结下自己对C编译的认识. /*test.c     了解C程序的编译*/ #include <s ...

随机推荐

  1. 安装nvm 切换nodejs版本

    删除已安装的nodejs--------------------------------------------------------------- #查看已经安装在全局的模块,以便删除这些全局模块 ...

  2. SQL-如何使用 MongoDB和PyMongo。

    先决条件 在开始之前,请确保已经安装了 PyMongo 发行版. 在 Python shell 中,下面的代码应该在不引发异常的情况下运行: >>> import pymongo 假 ...

  3. NYOJ-851寻找最大数(二),栈贪心!

    寻找最大数(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 给你一个数字n(可能有前缀0). 要求从高位到低位,进行 进栈出栈 操作,是最后输出的结果最大. 输入 ...

  4. NOIP2018普及游记

    我好弱啊,今年又是考pj啊 今年GD的又是在我们学校有考点(gzez) 考前其实还是蛮紧张的,毕竟考砸了就AFO了.我dp是真的弱,模拟赛连最长下降子序列都不会写,心想要是T3是dp就咕咕咕了.去年那 ...

  5. codevs1128 导弹拦截

    题目描述 Description 经过11 年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0 时,则能够拦截与它位置恰好相同的导弹 ...

  6. msp430入门编程00

    msp430单片机最小系统 msp430入门学习 msp430入门编程

  7. Dubbo 2.7.1 踩坑记

    Dubbo 2.7 版本增加新特性,新系统开始使用 Dubbo 2.7.1 尝鲜新功能.使用过程中不慎踩到这个版本的 Bug. 系统架构 Spring Boot 2.14-Release + Dubb ...

  8. Redis Cluster集群搭建后,客户端的连接研究(Spring/Jedis)(待实践)

    说明:无论是否已经搭建好集群,还是使用什么样的客户端去连接,都是必须把全部IP列表集成进去,然后随机往其中一个IP写. 这样做的好处: 1.随机IP写入之后,Redis Cluster代理层会自动根据 ...

  9. easyui datagrid-detailview 嵌套高度自适应

    实现效果 原因 异步加载,明细展开时,可能会遇到父列表不能自动适应子列表高度的变化 具体代码 $('#centerdatagrid').datagrid({ url:'${ctx}/offer/off ...

  10. 在HTML中显示图片时希望如果图片不存在或者无法显示时,能够显示默认图片

    很多时候,在HTML中显示图片时希望如果图片不存在或者无法显示时,能够显示默认图片.可以通过以下方式: <img src="xxx.jpg" onError="th ...