![]() |
Показать все 33 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Компиляция Parabot для Linux (https://hlfx.ru/forum/showthread.php?threadid=4540)
Компиляция 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.
Ku2zoff для работы со строками же есть встроенные в движок функции, начинающиеся с Q_ (Q_strcmp например)
__________________
-Brain is dead-
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;
code:
-D_stricmp=strcasecmp
code:
#ifndef _WIN32 #define _stricmp strcasecmp #endif
__________________
Ku2zoff, gcc определяет язык, но с libstdc++ по умолчанию не линкует. Поэтому вполне может скомпилировать C++ код, если стандартная библиотека не используется
С векторами беда:
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
Похоже, проблема с компилятором. В среде разработки всё раскрашивается нужными цветами и наследуется как надо.
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 вообще, то ли это специфика линуксовых инклуидов.
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); } };
FreeSlave спс, проверю завтра. Где-то я нагуглил подобный вариант решения проблем с STL, но так и не попробовал.
Собрал. Протестирую сначала своих модифицированных, потом соберу из чистых исходников и дам народу вместе с сорцами, подебажить. А то ботов для халфы под линукс не видел. Только для TFC и DoD.
Добавлено 01-02-2015 в 13:10:
З.Ы. Работа оказалась "Быдлокод в правильный код"
Завести ботов под линуксом не удалось, дебажить не стал, всё равно буду встраивать их в серверную дллку. Вот вам, форумчане, подправленные исходники. Если хотите, можете исправить мой быдлокод Класть папку sdk в папку с модом. Все либы собираются и под Linux тоже, makeфайлы есть. client.dll(.so) и server.dll(.so) после компиляции автоматом падают в cl_dlls и dlls папки мода. parabot.dll(.so) падает в папку parabot в корне халфы, где лежит лаунчер. В коде есть комментарии, что и как исправлено. Касательно Linux (для ботов, конечно) - ku2zoff: linux. Исправлял на скорую руку, так что вполне могут быть грубые косяки.
З.Ы. Оказалось, что чувствительность к регистру непостоянная: в "живом" дебиане с кедами идёт ругань на все инклуиды, названия которых не соответствуют реальным файлам. А в виртуальной машине с этим же дебианом и рабочим столом MATE, не ругается.
Добавлено 01-02-2015 в 23:34:
З.З.Ы. Visual Studio 2013 и gcc-4.9 использовал для компила.
З.З.З.Ы. В исходники клиента встроен фикс мышки при m_rawinput 1.
Линукс = боль
__________________
ㅤ
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
__________________
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
З.Ы. Что в паработах нехорошо, так это своеобразная конфигурация с профилями. Буду перепиливать по-своему, либо откачу до состояния HPB_bot и заведу персоналии, как в кондишн зеро.
Добавлено 03-02-2015 в 14:59:
1 | if ( a ) |
2 | { |
3 | blablabla; |
4 | } |
5 | else |
6 | { |
7 | __asm int 3 |
8 | } |
if ( a ) { |
blablabla; |
} else { |
__asm int 3 |
} |
__________________
__________________
Минутка полезного:
Бесплатный UT-подобный Half-Life mod.
Бесплатный редактор для 32-битных текстур. Без дотнета.
Бесплатный IDE для любых компиляторов и ЯП.
Бесплатная Windows-подобная ОС.
Проверка грамматики русского языка.
Чат по hl[fx]: [email protected]
__________________
XaeroX А накодить их кроме тебя нормально никто не может, вот и не забудут никак)
SteamPlay43
Вот и правильно. Будет лишний аргумент перейти на волатилу.
__________________
XaeroX Если ещё исходники откроешь и будет рабочий мультиплеер то перейду, если конечно ДМ не доделает mp в Xash'е)
SteamPlay43
А если доделает - тогда что?
__________________
XaeroX Переведу мой мод на Xash, т.к. мой мод mp
SteamPlay43
Я так скажу. Если у человека возникает вопрос, какой движок ему выбрать, волатилу или ксаш, то ему однозначно нужен ксаш. И никакими вировками прельщаться не надо, тем более дядя миша и сам их сделает, если хорошо попросишь и зашлёшь донат.
Впрочем, свернём-ка оффтоп, пока злые модераторы нас не заплюсовали.
__________________
Временная зона GMT. Текущее время 21:38. | Показать все 33 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024