2014-10-17 105 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。