crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> ASIO вечно недоволен... не компилит libTorrent, WinSock.h has already been included
Lestat
  опции профиля:
сообщение 7.10.2008, 19:08
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 11.6.2008
Из: Москва
Пользователь №: 198

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




Репутация:   0  


ASIO ругается такой вот ошибкой... очень часто
c:\lib\boost\boost_1_35_0\boost\asio\detail\socket_types.hpp(27) : fatal error C1189: #error :  WinSock.h has already been included
я каким-то макаром ее обходил, но теперь хочу разобраться почему она меня преследует...

компилю пример работы с libTorrent
#include <iostream>
#include <fstream>
#include <iterator>
#include <exception>

#include <boost/format.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

#include "libtorrent/entry.hpp"
#include "libtorrent/bencode.hpp"
#include "libtorrent/session.hpp"

int main(int argc, char* argv[])
{
        using namespace libtorrent;
#if BOOST_VERSION < 103400
        namespace fs = boost::filesystem;
        fs::path::default_name_check(fs::no_check);
#endif

        if (argc != 2)
        {
                std::cerr << "usage: ./simple_client torrent-file\n"
                        "to stop the client, press return.\n";
                return 1;
        }

        try
        {
                session s;
                s.listen_on(std::make_pair(6881, 6889));

                std::ifstream in(argv[1], std::ios_base::binary);
                in.unsetf(std::ios_base::skipws);
                entry e = bdecode(std::istream_iterator<char>(in), std::istream_iterator<char>());
                s.add_torrent(torrent_info(e), "./");

                // wait for the user to end
                char a;
                std::cin.unsetf(std::ios_base::skipws);
                std::cin >> a;
        }
        catch (std::exception& e)
        {
                std::cout << e.what() << "\n";
        }
        return 0;
}
код взял отсюда
неужели у автора тоже была ошибка и он выложил заведомо кривой пример... что-то я сомневаюсь.
Могу предположить что у меня кривой ASIO
но я компилил на этих же инклудах примеры самого асио, некоторые свои исходники... все работает, хотя затык такой всегда был.
обходил шаманством с инклудами... помогите, пожалуйста, определить в чем проблема!
Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 7.10.2008, 20:29
Сообщение #2


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

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

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




Репутация:   94  


Цитата(Lestat @ 7.10.2008, 23:08) *
WinSock.h has already been included
такое ощущение что гдето в заголовочниках забыты строки:
#ifndef CLASS_H
#define CLASS_H
...
#endif //CLASS_H


Цитата(Lestat @ 7.10.2008, 23:08) *
обходил шаманством с инклудами...
а что конкретно делал?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 7.10.2008, 20:37
Сообщение #3


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

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




Репутация:   17  


А если честно попробовать включить WinSock.h до заголовков libTorrent-а?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Lestat
  опции профиля:
сообщение 7.10.2008, 21:18
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 11.6.2008
Из: Москва
Пользователь №: 198

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




Репутация:   0  


Litkevich Yuriy, у меня в проекте было много заголовочных файлов и я фактически подключал их так чтобы этой ошибки не было...
ошибка я так понимаю вылетает когда уже засветился где-то выше #define WIN32
а он в windows.h есть, в файлах boost'а для работы с date-time
Tonal, я такие эксперименты раньше делал... и так, и сяк, а оно не работает... это ошибка - единственное серьезное неудобство с которым я сталкивался на данный момент
по всяким там функциям, классам, и т.д. примеры есть, а когда начинаю собирать в одном проекте (юзал wxWidgets, boost вместе с asio, OpenGL, Pango еще некоторая сопроводиловка), то не всегда компилится нормально
У меня практически всегда ASIO начинает ругаться на WinSock.h при некоторых неосторожных изменениях в инклудах)

пока можно выкрутится если вписать #define WIN32_LEAN_AND_MEAN перед включением всех файлов
прямо перед
#define WIN32_LEAN_AND_MEAN
#include <iostream>
#include <fstream>

у меня даже скомпилить получилось, только теперь либы нужны самого libtorrent
пытался собрать сам какую-нить libtorrent.lib, но нашел вот это опенсорсное на основе libtorrent LiberTV
Вот ТУТ полезная статья. В ней можно найти ссылку на LiberTV SDK (82.7 MB) там либы буста, DirectX 9 SDK и Windows Media Player 10 SDK.
Я так понимаю там собрали все что нужно для компиляции исходников.
Попробую оттуда повыдирать все что нужно для компиляции libtorrent'а
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 8.10.2008, 10:57
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

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




Репутация:   6  


Цитата(Lestat @ 7.10.2008, 22:18) *
Litkevich Yuriy, у меня в проекте было много заголовочных файлов и я фактически подключал их так чтобы этой ошибки не было...
ошибка я так понимаю вылетает когда уже засветился где-то выше #define WIN32
а он в windows.h есть, в файлах boost'а для работы с date-time
Tonal, я такие эксперименты раньше делал... и так, и сяк, а оно не работает... это ошибка - единственное серьезное неудобство с которым я сталкивался на данный момент
по всяким там функциям, классам, и т.д. примеры есть, а когда начинаю собирать в одном проекте (юзал wxWidgets, boost вместе с asio, OpenGL, Pango еще некоторая сопроводиловка), то не всегда компилится нормально
У меня практически всегда ASIO начинает ругаться на WinSock.h при некоторых неосторожных изменениях в инклудах)

пока можно выкрутится если вписать #define WIN32_LEAN_AND_MEAN перед включением всех файлов
прямо перед
#define WIN32_LEAN_AND_MEAN
#include <iostream>
#include <fstream>

у меня даже скомпилить получилось, только теперь либы нужны самого libtorrent
пытался собрать сам какую-нить libtorrent.lib, но нашел вот это опенсорсное на основе libtorrent LiberTV
Вот ТУТ полезная статья. В ней можно найти ссылку на LiberTV SDK (82.7 MB) там либы буста, DirectX 9 SDK и Windows Media Player 10 SDK.
Я так понимаю там собрали все что нужно для компиляции исходников.
Попробую оттуда повыдирать все что нужно для компиляции libtorrent'а


Ну епрст, все же написано C:\boost\boost_1_35_0\boost\asio\detail\socket_types.hpp
# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
# error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)

winsock2.h из MSVS 8.0
#ifndef _WINSOCK2API_
#define _WINSOCK2API_
#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
//...
#endif /* _WINSOCK2API_ */

Вывод: использовать то, что просят (winsock2, и либы mswsock, ws2_32)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Lestat
  опции профиля:
сообщение 19.10.2008, 21:33
Сообщение #6


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 11.6.2008
Из: Москва
Пользователь №: 198

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




Репутация:   0  


Проблема решилась, проблем больше нет!
Скомпилилась либа, собрался проект! :D
простейший торрент килент! качалка заработала
Но гимора я охатил прилично...
В исходнике, чтобы не было всяких fatal error C1189: #error : WinSock.h has already been included
нужно подключить #include "libtorrent/pch.hpp" до подключения #include "libtorrent/entry.hpp"
у меня покрайней мере так сработало...
для проекта необходимо собрать либу libtorrent.lib... с этим я тоже намучался
Выдрал проект либы из исходников опенсорсного клиента Halite
Либу получил, но при компилировании проекта на ее основе были ошибки... начал менять настройки проекта либы
Когда поставил поставил в настройках проекта Not Set в General->Character set и Multi-threaded Debug (/MTd) в C/C++->Code Ceneration->Runtime Library все стало работать как надо
Вобще я так понял если есть ошибки при линковке проекта(не либы, а самого торрент-клиента), то возможно ошибка как раз в том что либу не так собрали... в этих настройках
Я юзаю в пректе еще boost, wxWidgets, еще несколько либ и только при таких настройках компиляции либы проект соизволил собраться нормально.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 21.10.2008, 9:00
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

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




Репутация:   6  


Цитата(Lestat @ 19.10.2008, 22:33) *
Проблема решилась, проблем больше нет!
Скомпилилась либа, собрался проект! :D
простейший торрент килент! качалка заработала
Но гимора я охатил прилично...
В исходнике, чтобы не было всяких fatal error C1189: #error : WinSock.h has already been included
нужно подключить #include "libtorrent/pch.hpp" до подключения #include "libtorrent/entry.hpp"
у меня покрайней мере так сработало...
для проекта необходимо собрать либу libtorrent.lib... с этим я тоже намучался
Выдрал проект либы из исходников опенсорсного клиента Halite
Либу получил, но при компилировании проекта на ее основе были ошибки... начал менять настройки проекта либы
Когда поставил поставил в настройках проекта Not Set в General->Character set и Multi-threaded Debug (/MTd) в C/C++->Code Ceneration->Runtime Library все стало работать как надо
Вобще я так понял если есть ошибки при линковке проекта(не либы, а самого торрент-клиента), то возможно ошибка как раз в том что либу не так собрали... в этих настройках
Я юзаю в пректе еще boost, wxWidgets, еще несколько либ и только при таких настройках компиляции либы проект соизволил собраться нормально.

Поздравления :)

ЗЫ: намучался как то ставить видеоплеер в старый redhat... для того, чтобы его поставить надо было пересобрать glibc, собрать из исходников rpm, переставить его...,...,...,... просто сказка. Ушло две недели, как щаз помню. А результирующая бумажка с тем, как это делается, напоминает прохождение длинного квеста :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 20.4.2024, 10:59