Название: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: XpycT от Марта 01, 2010, 21:08 Примерно пол года назад понадобилось реализовать в своем проекте возможность создания .torrent файлов. Для этой цели выбрал библиотеку libtorrent-rasterbar. Но в отличии от msvc, сборка под MinGW оказалась довольно не приятной (пришлось править код самой библиотеки).
Старый вариант можете почитать >>> тут <<< (http://www.prog.org.ru/index.php?topic=10223.msg60771#msg60771) Итак, для этого нам понадобится: 1) Qt 4.5.x и выше 2) Boost 1.42.0 Src[скачать (http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.7z/download)] 3) Libtorrent 0.14.9 Src[скачать (http://libtorrent.googlecode.com/files/libtorrent-rasterbar-0.14.9.tar.gz)] (лучше с SVN (http://code.google.com/p/libtorrent/source/checkout)) Прим.: На время написания моя конфигурация была windows 7, Qt 4.6.2, gcc 4.4.0, boost 1.42.0, libtorrent из SVN (v0.15) Первое что делаем, это распаковываем boost и libtorrent куда вам удобнее. В моем случае это: D:\boost_1_42_0\ D:\SVN\3rdPartyLibs\libtorrent\ Настройка BOOST Теперь нам надо добавить 2 переменные среды, Код далее переходим в каталог D:\boost_1_42_0\tools\jam\src\ и запускаем build.bat с параметром mingw Код после чего в данном каталоге появится файл bjam.exe в подкаталоге bin.*, который надо скопировать в каталог, входящий в переменную PATH (например в c:\windows\system32). Далее откройте блокнотом файл D:\boost_1_42_0\tools\build\v2\user-config.jam и раскомментируйте нужный компилятор. В нашем случае меняем Код на Код С boost'ом закончили, теперь переходим к нашему libtorrent. Настройка LIBTORRENT В отличии от предыдущего варианта, тут все сводится только к набору ключей при сборке.Полный список ключей компилятора можете найти на сайте библиотеки в разделе build configurations (http://www.rasterbar.com/products/libtorrent/building.html) Так как мы не хотим делать полноценный клиент BitTorrent сетей, а использовать только создание торрент-файлов, то нам вполне подойдет следующий вариант. Создаем в корне директории libtorrent (D:\SVN\3rdPartyLibs\libtorrent\) файл build.bat, в котором прописываем следующее: Код
После запуска и полной компиляции, в корне директории Libtorrent в ./bin появятся поддиректории с именами ключей компилятора, в конце которых будет лежать готовая библиотека libtorrent.lib. (Для удобства вы можете вынести ее в корень каталога библиотеки, но я буду использовать путь по умолчанию.) После того как вы собрали библиотеку - можете проверить ее на стандартных примерах в каталоге examples. Для этого просто перейдите в эту папку и вызовите: Код Если примеры собрались без ошибок, тогда можно приступать к настройке проекта, если же были ошибки при сборке - посмотрите не пропустили ли вы что-то. Настройка проекта Создаем новый проект, открываем *.pro и добавляем в него Код
Настройка проекта закончена. В примерах библиотеки libtorrent есть make_torrent.cpp, где показано как производится создание .torrent файлов. Пример использования На случай, если у Вас все же не получилось импортировать пример создания .torrent файлов в Qt, даю часть кода, выдернутого из моего проекта (http://code.google.com/p/torrent-uploader/). Только для его сборки вам понадобится дополнительно собрать из boost'a filesystem. Для этого перейдите в каталог D:\boost_1_42_0\libs\filesystem\build\ и выполните там Код После этого подправьте пути к библиотекам в create_torrent.pro и пересоберите проект. В результате получите нечто похожее на uTorrent/BitTorrent: (http://img63.imageshack.us/img63/7734/111111dc.png) PS. Файл примера частично основан на qbittorent, с измененным интерфейсом и некоторыми улучшениями (изменил часть кода и добавил автоопределение размера частей, которым в qbittorent и не пахнет:-\) PSS. В связи с спецификой библиотеки libtorrent в windows наблюдаются проблемы с кириллицей в названиях файлов/каталогов. И если они присутствуют при создании torrent-файла, он может попросту быть пустым (ошибка кодировки). Потому для нормальной работы придется поиграться с кодировками. Что, к сожалению, у меня не вышло. В багрепорте библиотеки есть не одно сообщение с этой проблемой от русскоговорящих и от китайцев/корейцев, но разрабы видимо это попросту игнорируют. Потому просьба - если кто решит проблему с кодировками, поделитесь солюшеном. Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: niXman от Марта 02, 2010, 13:15 что-то вы намудрили.
"настройка boost" - все вами описанное можно выполнить опциями командной строки bjam. "Настройка LIBTORRENT" - а смысл так усложнять все, только ради bjam? есть же стандартный скрипт configure по поводу кодировок - у либторрент нет проблем с кодировками. если учесть, что разработчик либторрент не ориентируется на вендоюзеров, а так же то, что bencoded файлы !обязаны! содержать кодировку UTF, итог - все проблемы из-за венды. ну и самое интересное: тут: http://ru.wikipedia.org/wiki/Bencode описан формат bencode. из описания видно, что синтаксис простяцкий, и подсчет sha1 не проблема. если забить в гугл слово bencode, то вы просто афанареете от кол-ва готовых реализаций. на худой конец, можно просто выдрать из либторрент create_torrent.cpp и create_torrent.hpp, и поправить зависимости. но лучше написать самому, для самообразования. Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: XpycT от Марта 02, 2010, 14:51 что-то вы намудрили. Возможно и намудрил (так как я почти не работаю с boost'ом, для меня это вполне приемлемый способ), но в большей степени настройка почти не отличается от приведенной в документации самого libtorrent. Просто я выложил более раскрыто. У меня все это занимает не более 2-5 минут."настройка boost" - все вами описанное можно выполнить опциями командной строки bjam. "Настройка LIBTORRENT" - а смысл так усложнять все, только ради bjam? есть же стандартный скрипт configure по поводу кодировок - у либторрент нет проблем с кодировками. если учесть, что разработчик либторрент не ориентируется на вендоюзеров, а так же то, что bencoded файлы !обязаны! содержать кодировку UTF, итог - все проблемы из-за венды. Я так и сказал - что в !windows! наблюдаются проблемы. Я прекрасно понимаю что .torrent файл чаще всего в UTF-8, а вот кодировка пути каталогов/файлов windows в основном используется форма UTF-16LE. Потому в PSS первого поста и упомянул, что придется играться кодировками. (в linux системах все прекрасно работает)ну и самое интересное: Вот как раз в старом посте начало и было уделено самописному варианту, с форматом bencode проблем не возникло, но вот на подсчете суммы хешей и застрял (http://www.prog.org.ru/index.php?topic=10223.msg60647#msg60647), вроде как делал все по описанному в bencode формату, а полученый хеш так и не совпадал с "правильным" (созданным в torrent-клиентах ) :)тут: http://ru.wikipedia.org/wiki/Bencode описан формат bencode. из описания видно, что синтаксис простяцкий, и подсчет sha1 не проблема. если забить в гугл слово bencode, то вы просто афанареете от кол-ва готовых реализаций. на худой конец, можно просто выдрать из либторрент create_torrent.cpp и create_torrent.hpp, и поправить зависимости. но лучше написать самому, для самообразования. Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: niXman от Марта 02, 2010, 15:00 я как-то и не заглядывал по ссылке на старую тему. оказывается мы с вами уже общались по этому поводу. маразм замучил.
я некоим образом не хотел вас задеть/обидеть, просто мне показались все описанные труды, перебором для конкретной задачи. зы прошлую тему я похоже невнимательно читал. или не до этого было. сейчас попробую проделать аналогичную задачу. должно работать. хз, посмотрим. Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: XpycT от Марта 02, 2010, 15:11 Если получится сделать стандартными методами Qt, буду признателен за помощь. Сам бы с удовольствием отказался от libtorrent, если в винде пропадет проблема с разницей кодировок. Чисто принципиально не люблю таскать чужие либы в проектах :)
Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: niXman от Марта 02, 2010, 15:25 Цитировать Чисто принципиально не люблю таскать чужие либы в проектах никто не любит.зы сделаю на основе вашего проекта :) Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: xintrea от Марта 03, 2010, 02:34 По-моему, ваш HOWTO не соответсвует тематике раздела. У нас здесь уроки по Qt, а не по созданию частного решения для генерации torrent-файлов.
Пока думаю, переносить или нет. Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: coder_gate от Апреля 05, 2010, 10:46 i want build QT + Libtorrent + Mingw but when i do your instruction
error: Цитировать cd C:\Users\BotNetVN\Desktop\boost_1_42_0\tools\jam\src (http://c.upanh.com/upload/4/743/CS0.8873699_1_1.png)bjam gcc release link=static boost= source why ? http://www.qtcentre.org/threads/29531-Build-Libtorrent-By-Mingw-windows-7 if you free, can you upload your project ?, thanks Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: coder_gate от Апреля 05, 2010, 20:12 My source:
http://www.mediafire.com/?0mzlwz2ofgi error: Цитировать release/main.o:main.cpp:(.text+0x138): undefined reference to `torrentCreatorThread::create(QString, QString, QStringList, QStringList, QString, bool, int)' collect2: ld returned 1 exit status mingw32-make[1]: *** [release\Make_Torrent.exe] Error 1 mingw32-make: *** [release] Error 2 Exited with code 2. Error while building project Make_Torrent Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: xintrea от Апреля 06, 2010, 11:47 i want build QT + Libtorrent + Mingw but when i do your instruction error: why ? http://www.qtcentre.org/threads/29531-Build-Libtorrent-By-Mingw-windows-7 if you free, can you upload your project ?, thanks На будущее: у нас тут русскоязычный форум. По проблеме - начинать надо с правильной устновки boost. Пока не исчезнут ошибки вида unknown feature 'boost', далее компилировать смысла нет. Скорее всего boost у вас даже установлен, но где-то в проекте не прописаны пути к его заголовкам или библиотекам. Подробнее вам объяснят любители винды, я, к сожалению, могу только по линуху что-то посоветовать. Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: coder_gate от Апреля 11, 2010, 10:17 createtorrent.cpp: In function 'bool file_filter(const std::string&)':
createtorrent.cpp:26: error: 'filename' was not declared in this scope createtorrent.cpp: In member function 'virtual void torrentCreatorThread::run()': createtorrent.cpp:226: error: 'complete' is not a member of 'libtorrent' createtorrent.cpp:241: error: 'parent_path' was not declared in this scope In file included from createtorrent.cpp:13: Код: bool file_filter(std::string const& f) Код: void torrentCreatorThread::run() { Код: set_piece_hashes(t, parent_path(full_path) Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: coder_gate от Апреля 11, 2010, 11:37 Код: #include "createtorrent.h" Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: coder_gate от Апреля 13, 2010, 13:58 i builded success project create torrent but people on internet when use my .torrent cant download it beacause it dont seeding,can you help me seeding 1 file when it create .torrent ?
source code: http://www.mediafire.com/?j0do4g11ajr Название: Re: HowTo: создание .torrent файлов в Windows (Qt+MinGW+libtorrent) Отправлено: IlVolLeon от Ноября 03, 2011, 07:18 Хоть и "в этой теме не было ответов в течение, по крайней мере 120 дней.", но:
Код: char * ToUTF8(char * pszCode) Аминь... :) |