2014-10-17 7 views
2

Я пытаюсь изучить Wt для проекта, и сейчас я пытаюсь изучить его часть базы данных.Wt Database Wt :: Dbo

Я застрял в начале. Я пытаюсь изучить его из учебников dbo (есть учебник на сайте http://www.webtoolkit.eu/wt/doc/tutorial/dbo/tutorial.html#_installing_tt_wt_dbo_tt), который находится в примерах, которые входят в пакет Wt (tutorial1.C)

Я использую компилятор Qt (5.) в ubuntu , Я создал библиотеку Wt :: Dbo, как сказано в учебнике на сайте (см. Выше). проблема в том, что она все еще дает ошибку, которая есть;

не может найти LGL
collect2: л.д. возвращается 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(); 
} 

Заранее спасибо

ответ

1

Похоже, что проблема возникает из-за файла .pro. Я не уверен, как это работает, но проблема исчезла, когда я заменил pro-файл, когда я впервые его реализовал (скопировать-вставить из другого .pro-файла с очень небольшими изменениями и не должно быть никаких различий между первым последним один).

1

Прежде всего вам нужно понять, что Qt не является компилятором. Он представляет собой основу для разработки кросс-платформенных приложений и графических интерфейсов. Я полагаю, вы также можете использовать Qt Creator, который является IDE. Фактическим компилятором может быть gcc, clang, msvc или какой-либо другой. Ошибка связывания указывает, что вы создаете ее как приложение gui. Добавление «CONFIG - = qt» в ваш файл pro решит проблему. Кроме того, при создании нового проекта выберите «Не-Qt Project-> Plain C++ Application».