Create schema error (unknown database schema '')
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Create schema error (unknown database schema ''),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3340字,纯文字阅读大概需要5分钟。
内容图文
![Create schema error (unknown database schema '')](/upload/InfoBanner/zyjiaocheng/489/e8a6c6af7446415088ee216a28468f60.jpg)
Please tell me, can I use the static library in the following case:
library.hpp:
#ifndef _CPP_ODB_STATIC_LIBRARY_CPP_
#define _CPP_ODB_STATIC_LIBRARY_CPP_
#include <odb/database.hxx>
odb::database* createDb(void);
#pragma db object
struct Test
{
#pragma db id auto
int m_id;
};
#endif // _CPP_ODB_STATIC_LIBRARY_CPP_
library.cpp:
#include <odb/sqlite/database.hxx>
#include <odb/transaction.hxx>
#include <odb/schema-catalog.hxx>
#include "library.hpp"
odb::database* createDb(void)
{
odb::database* db = new odb::sqlite::database("test.db",
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE);
odb::transaction t(db->begin());
odb::schema_catalog::create_schema(*db);
t.commit();
return db;
}
main.cpp:
include <iostream>
#include <odb/exception.hxx>
#include "library.hpp"
int main()
{
try {
odb::database* db = createDb();
std::cout << "SUCCESS" << std::endl;
}catch(const odb::exception& ex){
std::cout << "ERROR: " << ex.what() << std::endl;
}
}
build:
$ odb --database sqlite --generate-schema library.hpp
$ g++ -c library-odb.cxx library.cpp main.cpp
$ ar cr library.a library.o library-odb.o
$ g++ -o test1 library.o library-odb.o main.o -lodb-sqlite -lodb
$ g++ -o test2 main.o library.a -lodb-sqlite -lodb
test:
$ ./test1
SUCCESS
$ ./test2
ERROR: unknown database schema ‘‘
misc:
$ uname -srm
Linux 3.8.0-23-generic x86_64
$ g++ --version | head -n1
g++ (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3
$ odb --version | head -n1
ODB object-relational mapping (ORM) compiler for C++ 2.2.0
Thanks!
--
Regards,
Andrey Boris Kolpackov 4 years ago Permalink Raw Message Hi Andrey,
Post by Andrey Devyatka
[...] This is exactly the same issue that we‘ve discussed just a few days
ago:
http://www.codesynthesis.com/pipermail/odb-users/2013-May/001286.html
Because your application doesn‘t directly reference any symbols from
library-odb.cxx, the linker ignores library-odb.o from library.a. As
a result the schema creation code does not end up in the executable.
Normally this is not a problem since most application executables
will also include code that persists objects, etc., which will
force the linker to include all the object files from the library.
In your test, however, all you do is create the schema. As mentioned
in the above email, with GNU ld you can use the --whole-archive
option to force the linker to include every object file from your
Post by Andrey Devyatka
$ g++ -o test2 main.o library.a -lodb-sqlite -lodb g++ -o test2 main.o -Wl,-whole-archive library.a -Wl,-no-whole-archive -lodb-sqlite -lodb
Another thing that you may find useful is the ‘separate‘ value for
the --schema-format option. It will trigger the generation of the
schema creation code as a separate C++ source file (library-schema.cxx).
You can then perhaps link it directly to your executable instead of
packaging it into a static library. See the ODB compiler command line
documentation (man pages) for more information on this option.
Boris Andrey Devyatka 4 years ago Permalink Raw Message Thank you!
... --
С уважением,
А. П. Девятка. from:http://odb-users.codesynthesis.narkive.com/3Ms11hIV/create-schema-error-unknown-database-schema
Create schema error (unknown database schema '')
标签:pack cts reg lin exec ack evel nat err
本文系统来源:http://www.cnblogs.com/lidabo/p/7296416.html
内容总结
以上是互联网集市为您收集整理的Create schema error (unknown database schema '')全部内容,希望文章能够帮你解决Create schema error (unknown database schema '')所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。