2014-10-17 59 views
2

我想学习一个项目的Wt,现在我正试图学习它的数据库部分。Wt数据库Wt :: Dbo

我被困在一开始。我试图从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退出状态

下面是来自内重量(从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(); 
} 

提前感谢代码

回答

1

由于.pro文件似乎出现问题。我不确定它是如何工作的,但是当我第一次实现它时,我替换了pro文件时问题不复存在(从另一个.pro文件复制粘贴,只需很少的修改,并且第一个和最后一个应该没有任何区别一)。

1

首先你需要明白Qt不是编译器。它是开发跨平台应用程序和GUI的框架。我相信,您可能也在使用IDE的Qt Creator。实际的编译器可能是gcc,clang,msvc或其他的。链接错误表明您将其构建为gui应用程序。在pro文件中添加'CONFIG - = qt'将解决问题。或者,在创建新项目时,选择Non-Qt Project-> Plain C++ Application。