序言
ODB算是很常用的数据库ORM库了。其对象化技术相当实用和简洁,但坑也不少,还缺乏中文参考资料,惨惨惨。这篇文章用以记录ODB使用过程中遇到的经验教训。
坑
1. 基础坑
1.1 库的依赖顺序
编译时,如果存在一条依赖链,而链里还有其他的依赖链时,比如'liba'依赖'libb'和'libc',而'libb'又依赖于'libc'。其引入的顺序必须是需要依赖他库的在前,被依赖的在后,也就是-la -lb -lc
。不然就会出现# [Undefined reference](https://www.codesynthesis.com/pipermail/odb-users/2015-February/002407.html)
错误。
1.2 静态库下的unknown database schema ''
运行错误
这是schema_catalog::create_schema()
引发的错误。原因是静态库在链接时,未使用的代码文件是不会链接的。方法是:
- GCC: 使用
-Wl,-whole-archive
和-Wl,-no-whole-archive
包裹目标静态库,这样就能使其全部文件均被链接。 - 通用: odb编译hxx文件时,使用
--schema-format separate
来额外产生一个独立的schema代码文件。与其他部分分离后就可以直接包含他们而无需去调用静态库
(未完待续)