HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Компиляция Parabot для Linux
Быдлокод в правильный код или наоборот?
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Компиляция Parabot для Linux

Как я и думал, столкнулся с массой проблем при попытке компиляции библиотеки parabot в linux.
1. работа со строками. Всякие _stricmp, _strnicmp, _strupr и прочее. Насколько безопасно заменить их обычными stricmp, strnicmp? Не будет ли вылетов или критичных багов? Ещё, для _strupr нет альтернативы в заголовках для GCC. Чем заменить по-хорошему?
2. std:vector. ИМХО, параша какая-то. Смотря на код, понимаю, почему многие не любят C++ и предпочитают чистый C. Так вот. Спецификации опять же отличаются. GCC не прожёвывает reference, const_reference, size_type и iterator. Это такой прикол от майкрософта насочинять новые типы и невозбранно юзать только под виндой?
3. Регистр.. Мать его! Студия прекрасно хавает исходник, к которому подключен заголовок PBT_DynArray.h, при том, что реальное имя файла pbt_dynarray.h. GCC начинает выпендриваться, типа файл не найден. Ему надо либо переименовать настоящий файл в соответствии со строчкой в исходнике, либо изменить строчку в исходнике в соответствии с реальным именем файла.

Пока что всё, дальше даже разбирать не стал. Погуглил, кое-что нашёл, но такие решения меня не устраивают. Что хочу узнать:
По пункту 1. Про безопасность замены обычными функциями уже спросил, про альтернативу _strupr тоже спросил. Может быть можно как-то настроить компилятор, чтоб он жевал исходники без модификации?
По пункту 2. Где можно почитать, какой вариант вектора правильный, и как избавиться от ошибок?
По пункту 3. Может быть, опять же, ключ командной строки для компилятора есть?

З.Ы. Знаю, что XaeroX писал ботов для Волатилы на основе Parabot, надеюсь он что-нибудь подскажет. Особенно по пункту 2.

Сообщить модератору | | IP: Записан
Сообщение: 143592

Старое сообщение 29-01-2015 21:34
- За что?
KiQ
Житель форума

Дата регистрации: Aug 2010
Проживает: Смоленск, Москва
Сообщений: 2088

Рейтинг



Ku2zoff для работы со строками же есть встроенные в движок функции, начинающиеся с Q_ (Q_strcmp например)

__________________
-Brain is dead-

Сообщить модератору | | IP: Записан
Сообщение: 143593

Старое сообщение 29-01-2015 21:56
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
KiQ писал:
есть встроенные в движок функции

Ну дык Valve почему-то ими не пользуются. Ни в сервере, ни в клиентке. И автор ботов тоже не пользовался.

Сообщить модератору | | IP: Записан
Сообщение: 143594

Старое сообщение 29-01-2015 22:02
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1078

Рейтинг



Цитата:
Ku2zoff писал:
std:vector. ИМХО, параша какая-то. Смотря на код, понимаю, почему многие не любят C++ и предпочитают чистый C. Так вот. Спецификации опять же отличаются. GCC не прожёвывает reference, const_reference, size_type и iterator. Это такой прикол от майкрософта насочинять новые типы и невозбранно юзать только под виндой?


Всё есть.

code:
std::vector<int>::iterator it; int i = 0; std::vector<int>::reference r = i; std::vector<int>::size_type s; std::vector<int>::const_reference c = i;


Цитата:
Ku2zoff писал:
Может быть можно как-то настроить компилятор, чтоб он жевал исходники без модификации?


Определи соответствующие дефайны в командной строке. Типа
code:
-D_stricmp=strcasecmp

Или запиши определения в заголовочный файл, который повсюду подключается

code:
#ifndef _WIN32 #define _stricmp strcasecmp #endif


Цитата:
Ku2zoff писал:
Где можно почитать, какой вариант вектора правильный, и как избавиться от ошибок?

Можешь читать cplusplus.com. Там если какие-то нестандартные вещи приводятся, то и явно написано, что они не в стандарте.

Цитата:
Ku2zoff писал:
Регистр.. Мать его!

Это уже особенности винды. Ключ вряд ли какой есть. В никсах файлы в разных регистрах - принципиально разные файлы.

Сообщить модератору | | IP: Записан
Сообщение: 143595

Старое сообщение 30-01-2015 00:13
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34567
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


Цитата:
FreeSlave писал:
Это уже особенности винды. Ключ вряд ли какой есть. В никсах файлы в разных регистрах - принципиально разные файлы.

Это особенности линукса, рассчитанного на роботов, а не людей.
Для психически здорового человека файлы в разных регистрах - это один и тот же файл.

__________________

Сообщить модератору | | IP: Записан
Сообщение: 143598

Старое сообщение 30-01-2015 06:03
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
FreeSlave писал:
Всё есть.

Ну а чего компилятор тогда ноет, что нет? Что, прям в самом файле объявлять надо?
Цитата:
FreeSlave писал:
-D_stricmp=strcasecmp

Спасибо за подсказку. Буду гуглить альтернативы. Код _strupr (нашёл в инете) прям в нужный файл засуну, он там всего в одной cpp-шке используется.
Цитата:
XaeroX писал:
Для психически здорового человека файлы в разных регистрах - это один и тот же файл.

Ну с регистром проблема небольшая. Там вроде в двух местах всего лишь написано #include не в нижнем регистре. Перепишу.

А как с вектором-то быть? Может объявить std::vector как-то по-другому? Или заголовок специфический подключить надо? Заголовки есть же, иначе компилятор бы на их отсутствие ругался. Я причину того, что компилятор не находит эти типы, пока не понял.

Цитата:
FreeSlave писал:
Там если какие-то нестандартные вещи приводятся, то и явно написано, что они не в стандарте.

Ну вот _strupr, к примеру, не в стандарте ANSI.

Отредактировано Ku2zoff 30-01-2015 в 07:46

Сообщить модератору | | IP: Записан
Сообщение: 143601

Старое сообщение 30-01-2015 07:27
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1078

Рейтинг



Цитата:
Ku2zoff писал:
Ну а чего компилятор тогда ноет, что нет? Что, прям в самом файле объявлять надо?

Откуда я знаю? Ты ни логов, ни командной строки, ни примеров кода не кидал. Может, ты там вообще gcc вместо g++ вызываешь

Цитата:
XaeroX писал:
Это особенности линукса, рассчитанного на роботов, а не людей.

Тогда уж всех юниксов вообще, если быть справедливым.

Сообщить модератору | | IP: Записан
Сообщение: 143603

Старое сообщение 30-01-2015 12:27
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
FreeSlave писал:
Может, ты там вообще gcc вместо g++ вызываешь

Ой, точно Сервер им полностью по дефолту компилится. А для компиляции клиента юзаются и gcc и g++. Причём gcc компилит только pm_shared. Вот оно в чём дело. На сервере, похоже, нету специфического кода, в отличие от клиента, вот gcc его и жуёт. А в коде ботов запоролся с сиплюсплюсным std. Щас копнём в этом направлении.
З.Ы. если удастся собрать без проблем, то попробую применить фиксы для Linux (сворую из HPB_bot). Чтобы можно было хотя бы в HLDM, OpFor и DMC гамать. Жаль, поддержка TFC недоделанная

Отредактировано Ku2zoff 30-01-2015 в 16:14

Сообщить модератору | | IP: Записан
Сообщение: 143612

Старое сообщение 30-01-2015 16:05
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1078

Рейтинг



Ku2zoff, gcc определяет язык, но с libstdc++ по умолчанию не линкует. Поэтому вполне может скомпилировать C++ код, если стандартная библиотека не используется

Сообщить модератору | | IP: Записан
Сообщение: 143615

Старое сообщение 30-01-2015 16:51
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



С векторами беда:

code:
bot/pb_goals.o -c ../parabot-source/bot/pb_goals.cpp In file included from ../parabot-source/bot/pb_mapgraph.h:9:0, from ../parabot-source/bot/pb_cell.cpp:3: ../parabot-source/utils/checkvec.h:19:31: error: expected ‘)’ before ‘n’ checkedVector(size_type n, const T& value = T()) ^ In file included from ../parabot-source/bot/pb_mapgraph.h:9:0, from ../parabot-source/bot/parabot.h:5, from ../parabot-source/bot/bot.cpp:13: ../parabot-source/utils/checkvec.h:19:31: error: expected ‘)’ before ‘n’ checkedVector(size_type n, const T& value = T()) ^ ../parabot-source/utils/checkvec.h:23:30: error: expected ‘)’ before ‘i’ checkedVector(iterator i, iterator j) ^ ../parabot-source/utils/checkvec.h:27:4: error: ‘reference’ does not name a type reference operator[](difference_type index) ^ ../parabot-source/utils/checkvec.h:27:4: note: (perhaps ‘typename std::vector<T>::reference’ was intended) ../parabot-source/utils/checkvec.h:34:7: error: ‘const_reference’ does not name a type const_reference operator[](difference_type index) const ^ ../parabot-source/utils/checkvec.h:34:7: note: (perhaps ‘typename std::vector<T>::const_reference’ was intended) ../parabot-source/utils/checkvec.h:23:30: error: expected ‘)’ before ‘i’ checkedVector(iterator i, iterator j) ^ ../parabot-source/utils/checkvec.h:27:4: error: ‘reference’ does not name a type reference operator[](difference_type index) ^ ../parabot-source/utils/checkvec.h:27:4: note: (perhaps ‘typename std::vector<T>::reference’ was intended) ../parabot-source/utils/checkvec.h:34:7: error: ‘const_reference’ does not name a type const_reference operator[](difference_type index) const

Сообщить модератору | | IP: Записан
Сообщение: 143620

Старое сообщение 31-01-2015 08:03
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Похоже, проблема с компилятором. В среде разработки всё раскрашивается нужными цветами и наследуется как надо.

Сообщить модератору | | IP: Записан
Сообщение: 143634

Старое сообщение 31-01-2015 13:30
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1078

Рейтинг



Цитата:
Ku2zoff писал:
Похоже, проблема с компилятором. В среде разработки всё раскрашивается нужными цветами и наследуется как надо.

Ага, конечно, тот ещё показатель

Ты бы лучше кинул ссылочку на сорцы этих ботов.

Сообщить модератору | | IP: Записан
Сообщение: 143637

Старое сообщение 31-01-2015 13:43
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



FreeSlave блин, ну раз пять на форуме выкладывалась.
http://racc.bots-united.com/parabot-source.zip
Сорцы оригинальные, не компилятся студиями новее 6.0 без правки исходников. Свои правленные не дам, т.к. там уже много изменений, которые я до релиза мода и исходников не хочу светить.

Добавлено 31-01-2015 в 19:59:

Для правильной компиляции нужен минимум HLSDK 2.3, но после смены порядка инклуидов и пары мелких правок, компилятся с новым СДК с гитхаба. Работают и не вылетают, если компилить 2013 студией.

Добавлено 31-01-2015 в 20:03:

Я застрял на файле checkvec.h, никак не могу понять, то ли checkedVector не наследует std::vector вообще, то ли это специфика линуксовых инклуидов.

Сообщить модератору | | IP: Записан
Сообщение: 143638

Старое сообщение 31-01-2015 14:03
- За что?
FreeSlave
Житель форума

Дата регистрации: Nov 2007
Проживает: Тула
Сообщений: 1078

Рейтинг



Ku2zoff, всё так, как должно быть. Другое дело, что майкрософтовские компиляторы позволяют себе больше, чем описано в стандарте.
Вот так должно работать:

code:
template<class T> class checkedVector : public vector<T> // inherit from std::vector<T> { public: // type names like iterator etc. are also inherited checkedVector() {} checkedVector(typename checkedVector::size_type n, const T& value = T()) : vector<T>(n, value) {} checkedVector(typename checkedVector::iterator i, typename checkedVector::iterator j) : vector<T>(i, j) {} typename checkedVector::reference operator[](typename checkedVector::difference_type index) { assert(index >=0 && index < static_cast<typename checkedVector::difference_type>(this->size())); return vector<T>::operator[](index); } typename checkedVector::const_reference operator[](typename checkedVector::difference_type index) const { assert(index >=0 && index < static_cast<typename checkedVector::difference_type>(this->size())); return vector<T>::operator[](index); } };

Сообщить модератору | | IP: Записан
Сообщение: 143641

Старое сообщение 31-01-2015 14:15
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



FreeSlave спс, проверю завтра. Где-то я нагуглил подобный вариант решения проблем с STL, но так и не попробовал.

Сообщить модератору | | IP: Записан
Сообщение: 143643

Старое сообщение 31-01-2015 14:43
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 23:56. Новая тема    Ответить
Страницы (3): [1] 2 3 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Компиляция Parabot для Linux
Быдлокод в правильный код или наоборот?
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024