LINUX.ORG.RU

[GCC] компиляция HL1-сервера под Linux

 


0

0

Все знают, что такое Half-Life и что для него полным-полно linux-серверов. Для того чтобы оный заиметь для какого-то мода, нужно его ДЛЛ-ку скомпилить в .so. По умолчанию всё, что сделано на основе Half-Life SDK (server DLL) компилится под линукс (makefile тому подтверждение). Однако, когда я попытался скомпилировать проект, GCC начал грязно ругаться и посылать меня очень далеко и надолго. Итак:

source: C/C++, Half-Life SDK, (если кому интересно, исходники можно взять здесь: http://xwider.wtr.ru/modules.php?op=modload&name=Downloads&file=index... - предыд. версия)

IDE: Code::Blocks
C: GCC 4.2.3-2Ubuntu7
OS: Ubuntu 8.04 x86-64
System: laptop C2D T8300

Суть проблемы: при компиляции вылетает куча совершенно никчёмных warning'ов типа

/home/x/projects/XDM/dlls/ai_basenpc_schedule.cpp||In member function ‘void CBaseMonster::ChangeSchedule(Schedule_t*)’:
/home/x/projects/XDM/dlls/ai_basenpc_schedule.cpp|89|warning: deprecated conversion from string constant to ‘char*’
/home/x/projects/XDM/dlls/ai_basenpc_schedule.cpp||In member function ‘void CBaseMonster::MaintainSchedule()’:
/home/x/projects/XDM/dlls/ai_basenpc_schedule.cpp|242|warning: NULL used in arithmetic


И, что самое главное, ошибок:
error: invalid static_cast from type '<unresolved overloaded function type>' to type 'void (CBaseEntity::*)(CBaseEntity*)'
error: cast from 'const char*' to 'int' loses precision

Как этого избежать? Компилятор MSVC, есснно, всё это кушает за милую душу.

Компилю с флагом c++98. Пытался скомпилить под i386, но ругается, что процессор не тот (CPU ypu selected does not support X86-64 instruction set) - может всё-таки как-нибудь можно скомпилить i386??

PS: никогда ничего в жизни не компилил под linux - уж простите. Всю жизнь прожил в VC 6.0. (^_^)/


"Пытался скомпилить под i386" читать как "-march=i386"

xawari
() автор топика

1) Попробуй более старую версию гыцацы (3.4.6 например).

2) Чтобы собрать под amd64 бинарник под x86 есть ключки -m32.

Deleted
()

> function ‘void
А файлы в какой кодировке?

anonymous
()

>error: cast from 'const char*' to 'int' loses precision

Это потому что в x86-64 размер целого и указателя не совпадают. Надо либо править исходники, либо компилировать в 32-битном режиме (ключ -m32).

dmitry_vk ★★★
()
Ответ на: комментарий от dmitry_vk

>>error: cast from 'const char*' to 'int' loses precision

Злой говнокод детектед =).

Deleted
()

>>error: cast from 'const char*' to 'int' loses precision >> Злой говнокод детектед =).

VALVe desu. Вернее, это даже квачный1 код. Мне он нравится не меньше.

>> function ‘void >> А файлы в какой кодировке? Это былолог в Юникоде. Кстати, GCC оказалось откровенно по барабану, вендовские файлы или никсовые. o_O

За -m32 спасибо. Но теперь требуются 32-битные хэдеры, например <gnu/stubs-32.h> Надо качать, а и-нета нет. 8(((((( Они вообще большие?

xawari
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.