我正在尝试为一个项目学习Wt,现在我正在尝试学习数据库的一部分。
我一开始就被困住了。我试图从dbo教程(在网站http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html#_installing_tt_wt_dbo_tt中有一个教程)中学习它,这是Wt包中的示例(tutorial1.C)
我在ubuntu中使用Qt编译器(5.)。我已经构建了Wt :: Dbo库,正如它在网站教程(上面链接)中所说的那样。问题是它仍然会出现错误;
找不到lGL
collect2:ld返回1退出状态
以下是Wt中的代码(直接从tutorial1.C复制)
/*
* Copyright (C) 2010 Emweb bvba, Kessel-Lo, Belgium.
*
* See the LICENSE file for terms of use.
*/
/*****
* This file is part of the Wt::Dbo tutorial:
* http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html
*****/
#include <Wt/Dbo/Dbo>
#include <Wt/Dbo/backend/Sqlite3>
#include <string>
namespace dbo = Wt::Dbo;
/*****
* Dbo tutorial section 2. Mapping a single class
*****/
class User {
public:
enum Role {
Visitor = 0,
Admin = 1,
Alien = 42
};
std::string name;
std::string password;
Role role;
int karma;
template<class Action>
void persist(Action& a)
{
dbo::field(a, name, "name");
dbo::field(a, password, "password");
dbo::field(a, role, "role");
dbo::field(a, karma, "karma");
}
};
void run()
{
/*****
* Dbo tutorial section 3. A first session
*****/
/*
* Setup a session, would typically be done once at application startup.
*
* For testing, we'll be using Sqlite3's special :memory: database. You
* can replace this with an actual filename for actual persistence.
*/
dbo::backend::Sqlite3 sqlite3(":memory:");
sqlite3.setProperty("show-queries", "true");
dbo::Session session;
session.setConnection(sqlite3);
session.mapClass<User>("user");
/*
* Try to create the schema (will fail if already exists).
*/
session.createTables();
{
dbo::Transaction transaction(session);
User *user = new User();
user->name = "Joe";
user->password = "Secret";
user->role = User::Visitor;
user->karma = 13;
dbo::ptr<User> userPtr = session.add(user);
}
/*****
* Dbo tutorial section 4. Querying objects
*****/
{
dbo::Transaction transaction(session);
dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe");
std::cerr << "Joe has karma: " << joe->karma << std::endl;
dbo::ptr<User> joe2 = session.query< dbo::ptr<User> >
("select u from user u").where("name = ?").bind("Joe");
}
{
dbo::Transaction transaction(session);
typedef dbo::collection< dbo::ptr<User> > Users;
Users users = session.find<User>();
std::cerr << "We have " << users.size() << " users:" << std::endl;
for (Users::const_iterator i = users.begin(); i != users.end(); ++i)
std::cerr << " user " << (*i)->name
<< " with karma of " << (*i)->karma << std::endl;
}
/*****
* Dbo tutorial section 5. Updating objects
*****/
{
dbo::Transaction transaction(session);
dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe");
joe.modify()->karma++;
joe.modify()->password = "public";
}
{
dbo::Transaction transaction(session);
dbo::ptr<User> joe = session.find<User>().where("name = ?").bind("Joe");
if (joe)
joe.remove();
}
{
dbo::Transaction transaction(session);
dbo::ptr<User> silly = session.add(new User());
silly.modify()->name = "Silly";
silly.remove();
}
}
int main(int argc, char **argv)
{
run();
}
提前致谢
答案 0 :(得分:2)
由于.pro文件,似乎出现问题。我不知道它是如何工作的但是当我第一次实现它时替换了pro文件时问题就消失了(从另一个.pro文件复制粘贴,只需要很少的修改,最后一个也不应该有任何差别。一)。
答案 1 :(得分:2)
首先,您需要了解Qt不是编译器。它是跨平台应用程序和GUI开发的框架。我相信,你可能也在使用Qt Creator这是一个IDE。实际的编译器可能是gcc,clang,msvc或其他一些。链接错误表明您将其构建为gui应用程序。添加&#39; CONFIG - = qt&#39;在您的专业文件中将解决问题。或者,在创建新项目时,选择Non-Qt Project-&gt; Plain C ++ Application。