crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Qt + MinGW + libtorrent, Помогите прикрутить библиотеку под windows
XpycT
  опции профиля:
сообщение 4.8.2009, 10:03
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 43
Регистрация: 7.7.2009
Пользователь №: 883

Спасибо сказали: 0 раз(а)




Репутация:   0  


Бьюсь уже второй день, но никак не могу подцепить эту библиотеку к проекту под виндой. Пробовал по гайду на их сайте, boost собирается нормально, а вот libtorrent никак не хочет :( Уже и пробовал просто добавить в INCLUDEPATH путь к бусту и либторренту, но вкончается ошибками компиляции
Раскрывающийся текст


Выполняется сборка проекта style_button...
Запускается: C:/DevTools/Qt/4.5.2/qt/bin/qmake.exe D:/Qt4_tutorial/my/style_button/style_button.pro -spec win32-g++ -r
Завершено с кодом возврата 0.
Запускается: C:/DevTools/Qt/4.5.2/mingw/bin/mingw32-make.exe -w
mingw32-make: Entering directory `D:/Qt4_tutorial/my/style_button'
C:/DevTools/Qt/4.5.2/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/Qt4_tutorial/my/style_button'
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\DevTools\Qt\4.5.2\qt\include\QtCore" -I"c:\DevTools\Qt\4.5.2\qt\include\QtGui" -I"c:\DevTools\Qt\4.5.2\qt\include" -I"." -I"..\..\addin\libtorrent-rasterbar-0.14.4\include" -I"..\..\addin\libtorrent-rasterbar-0.14.4\zlib" -I"..\..\addin\boost_1_39_0" -I"c:\DevTools\Qt\4.5.2\qt\include\ActiveQt" -I"debug" -I"c:\DevTools\Qt\4.5.2\qt\mkspecs\win32-g++" -o debug\main.o main.cpp
In file included from c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/windows.h:50,
from c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winsock2.h:22,
from ../../addin/boost_1_39_0/boost/asio/detail/socket_types.hpp:79,
from ../../addin/boost_1_39_0/boost/asio/detail/win_iocp_io_service_fwd.hpp:24,
from ../../addin/boost_1_39_0/boost/asio/io_service.hpp:37,
from ../../addin/boost_1_39_0/boost/asio/basic_io_object.hpp:20,
from ../../addin/boost_1_39_0/boost/asio/basic_socket_acceptor.hpp:20,
from ../../addin/boost_1_39_0/boost/asio/ip/tcp.hpp:20,
from ../../addin/libtorrent-rasterbar-0.14.4/include/libtorrent/socket.hpp:60,
from ../../addin/libtorrent-rasterbar-0.14.4/include/libtorrent/torrent_info.hpp:54,
from main.cpp:7:
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1058:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1466:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1787:49: operator '>=' has no left operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:1943:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winbase.h:2133:47: operator '||' has no right operand
In file included from c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/windows.h:52,
from c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winsock2.h:22,
from ../../addin/boost_1_39_0/boost/asio/detail/socket_types.hpp:79,
from ../../addin/boost_1_39_0/boost/asio/detail/win_iocp_io_service_fwd.hpp:24,
from ../../addin/boost_1_39_0/boost/asio/io_service.hpp:37,
from ../../addin/boost_1_39_0/boost/asio/basic_io_object.hpp:20,
from ../../addin/boost_1_39_0/boost/asio/basic_socket_acceptor.hpp:20,
from ../../addin/boost_1_39_0/boost/asio/ip/tcp.hpp:20,
from ../../addin/libtorrent-rasterbar-0.14.4/include/libtorrent/socket.hpp:60,
from ../../addin/libtorrent-rasterbar-0.14.4/include/libtorrent/torrent_info.hpp:54,
from main.cpp:7:
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/wingdi.h:2706:21: operator '>=' has no left operand
In file included from c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/windows.h:55,
from c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winsock2.h:22,
from ../../addin/boost_1_39_0/boost/asio/detail/socket_types.hpp:79,
from ../../addin/boost_1_39_0/boost/asio/detail/win_iocp_io_service_fwd.hpp:24,
from ../../addin/boost_1_39_0/boost/asio/io_service.hpp:37,
from ../../addin/boost_1_39_0/boost/asio/basic_io_object.hpp:20,
from ../../addin/boost_1_39_0/boost/asio/basic_socket_acceptor.hpp:20,
from ../../addin/boost_1_39_0/boost/asio/ip/tcp.hpp:20,
from ../../addin/libtorrent-rasterbar-0.14.4/include/libtorrent/socket.hpp:60,
from ../../addin/libtorrent-rasterbar-0.14.4/include/libtorrent/torrent_info.hpp:54,
from main.cpp:7:
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:401:21: operator '>=' has no left operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:2016:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:2183:21: operator '>=' has no left operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:2370:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:2385:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:2401:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3128:21: operator '>=' has no left operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3191:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3200:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3556:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3580:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3612:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3663:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3740:21: operator '>=' has no left operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3754:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:3840:47: operator '||' has no right operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:4037:21: operator '>=' has no left operand
c:/DevTools/Qt/4.5.2/mingw/bin/../lib/gcc/mingw32/3.4.5/../../../../include/winuser.h:4062:47: operator '||' has no right operand
In file included from ../../addin/boost_1_39_0/boost/date_time/microsec_time_clock.hpp:23,
from ../../addin/boost_1_39_0/boost/date_time/posix_time/posix_time_types.hpp:11,
from ../../addin/boost_1_39_0/boost/asio/detail/select_reactor.hpp:25,
from ../../addin/boost_1_39_0/boost/asio/impl/io_service.ipp:27,
from ../../addin/boost_1_39_0/boost/asio/io_service.hpp:550,
from ../../addin/boost_1_39_0/boost/asio/basic_io_object.hpp:20,
from ../../addin/boost_1_39_0/boost/asio/basic_socket_acceptor.hpp:20,
from ../../addin/boost_1_39_0/boost/asio/ip/tcp.hpp:20,
from ../../addin/libtorrent-rasterbar-0.14.4/include/libtorrent/socket.hpp:60,
from ../../addin/libtorrent-rasterbar-0.14.4/include/libtorrent/torrent_info.hpp:54,
from main.cpp:7:
../../addin/boost_1_39_0/boost/date_time/filetime_functions.hpp: In function `uint64_t boost::date_time::winapi::file_time_to_microseconds(const FileTimeT&)':
../../addin/boost_1_39_0/boost/date_time/filetime_functions.hpp:101: warning: left shift count >= width of type

mingw32-make[1]: Leaving directory `D:/Qt4_tutorial/my/style_button'
mingw32-make: Leaving directory `D:/Qt4_tutorial/my/style_button'
mingw32-make[1]: *** [debug/main.o] Error 1
mingw32-make: *** [debug] Error 2
Завершено с кодом возврата 2.
Ошибка во время сборки проекта style_button
Во время выполнения сборки на этапе 'Make'



Хочется добавить к проекту возможность создания .torrent файлов, и как на зло - в примерах торрент клиента нет его создания и не получается прикрутить сторонюю библиотеку :(

Сама библиотека тут

Может кто сталкивался, или же знает альтернативные способы их создания?

Сообщение отредактировал XpycT - 4.8.2009, 10:05
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
XpycT
  опции профиля:
сообщение 4.8.2009, 18:50
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 43
Регистрация: 7.7.2009
Пользователь №: 883

Спасибо сказали: 0 раз(а)




Репутация:   0  


Прикрутить так и не получилось, решил попробовать написать генерацию .torrent файла сам. Пришел к тому, что все, кроме последнего раздела получается нормально, а вот peaces никак не могу получить.
Ссылки на спецификацию формата:
http://blog.bitcomet.com/bitcomet/post_413/
http://bittorrent.org/beps/bep_0003.html
http://wiki.theory.org/BitTorrentSpecification

То что у меня получилось
testapp.h
Раскрывающийся текст
#ifndef TESTAPP_H
#define TESTAPP_H

#include <QDialog>

class testApp : public QDialog
{
    Q_OBJECT
public:
    testApp(QWidget *parent=0);
private slots:
    void generate();
};

#endif // TESTAPP_H

testapp.cpp
Раскрывающийся текст
#include <QtGui>
#include "testapp.h"

testApp::testApp(QWidget *parent):QDialog(parent)
{
    QPushButton *openbtn=new QPushButton("OpenFile");
    QPushButton *genbtn=new QPushButton("Generate");

    QVBoxLayout *layout=new QVBoxLayout;
    layout->addWidget(openbtn);
    layout->addWidget(genbtn);

    setLayout(layout);
    connect(openbtn,SIGNAL(clicked()),this,SLOT(generate()));
}
void testApp::generate()
{
    QString announce="http://donald.org.ua/tracker/announce.php";
    QString createdby="BitTorrent/6120";
    int pieceslength= 256*1024;
    QString torrentcontent;

    QString fileName = QFileDialog::getOpenFileName(this,tr("Select"),
                                       QApplication::applicationDirPath(),
                                       tr("All Files (*.*)"));
    if(fileName.isEmpty())
            return;

    QFile file(fileName);
    QFileInfo fi(file);    
    if (!file.open(QIODevice::ReadOnly))
            return;

    QByteArray pieces = file.readAll();
    QByteArray tmp;
    QCryptographicHash *hash=new QCryptographicHash(QCryptographicHash::Sha1);
    for (int i = 0; i < pieces.size(); i += 20){
                hash->reset();
                hash->addData(pieces.mid(i, 20));
                tmp.append(hash->result());
            }


    //hash->addData(pieces);

    torrentcontent = QString("d8:announce%1:%2")
                     .arg(announce.length()).arg(announce);
    torrentcontent.append(QString("10:created by%1:%2")
                          .arg(createdby.length()).arg(createdby));
    torrentcontent.append(QString("13:creation datei%1")
                          .arg(QDateTime::currentDateTime().currentDateTime().toTime_t()));
    torrentcontent.append(QString("e8:encoding5:UTF-84:infod6:lengthi%1e4:name%2:%3")
                          .arg(file.size()).arg(fi.fileName().length()).arg(fi.fileName()));
    torrentcontent.append(QString("12:piece lengthi%1e6:pieces%2:")
                          .arg(pieceslength).arg(hash->result().length()));

     QFile data("output.torrent");
     if (data.open(QFile::WriteOnly)) {
         QTextStream out(&data);
         out << torrentcontent << tmp;

     }
     data.close();
}

Как я понял, надо прочитать весь файл, разбить его по 20 байт, и эти байты закриптовать в Sha1. Но как не пытаюсь сделать - созданный файл отличается от созданного в клиенте, и при его открытии выпадает сообщение о не битом формате <_<
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.8.2009, 5:31
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


А в примере %QTDIR%\examples\network\torrent ответов нет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
XpycT
  опции профиля:
сообщение 5.8.2009, 8:30
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 43
Регистрация: 7.7.2009
Пользователь №: 883

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я же написал, что в примере нет создания торрента :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
XpycT
  опции профиля:
сообщение 14.8.2009, 20:46
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 43
Регистрация: 7.7.2009
Пользователь №: 883

Спасибо сказали: 0 раз(а)




Репутация:   0  


Подниму тему. Библиотеку прикрутил нормально. Проблема в русских символах под виндой. Не создает файлы где в названии или пути присутствуют русские символы.. Уже вертел и кодировкой от Qt и от буста и от самого libtorrent'a, но никак не могу заставить их нормально восприниматься. Ради интереса выкачал qBittorrent под винду, но и там такая же проблема :)

Интересно то что в линуксе работает все нормально (если стоит локаль UTF-8 ), а тут фиг. Может кто уже сталкивался с таким да сможет подсказать как решить данную проблему? :)

Сообщение отредактировал XpycT - 14.8.2009, 20:47
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.4.2024, 14:00