Ru/Compiling under VS2008: Difference between revisions
mNo edit summary |
m (obsolete language category) |
||
(11 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
{{lang|Compiling under VS2008||title=Компиляция под VS2008}} | |||
{{ | {{toc-right}} | ||
{{ | В этой статье вы узнаете как получить {{L|Source SDK}} для компиляции под '''Visual Studio 2008''' и/или '''Visual C++ Express 2008'''. Есть несколько вещей, которые вам необходимо сделать для начала работы. Прежде чем начать, {{L|Create a Mod/Source|создайте ваш мод}}. | ||
{{Warning|Предполагается, что вы компилируете последнюю версию исходного кода Orange Box.}} | |||
{{Tip|Вам ''не'' требуется устанавливать Platform SDK. VS2008 и VCE2008 включают в себя все необходимое.}} | |||
{{Note|Иногда вы будете сталкиваться с предупреждением "precompiled header skipped". Это нормально.}} | |||
== Установка Visual Studio 2008 == | |||
Если у вас нет Visual Studio 2008, вы можете бесплатно [http://www.microsoft.com/express/download/ получить Visual C++ Express 2008] от Microsoft. | |||
=== Обновление до Service Pack 1 === | |||
Если вы установили VS2008 до Августа 2008 года, вам необходимо установить SP1. Service Pack скачивается через Windows Update, однако на данный момент, требуется ручная загрузка: | |||
== | * [http://www.microsoft.com/downloads/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E обновление Visual Studio] | ||
* [http://www.microsoft.com/downloads/details.aspx?FamilyId=F3FBB04E-92C2-4701-B4BA-92E26E408569 обновление Visual C++ Express] (выберите vcsetup.exe) | |||
Service Pack 1 улучшает отчеты об ошибках и исправляет ошибки при работе с базой данных Intellisense, остальные улучшения не имеют прямого отношения к Source SDK. | |||
{{Warning|Если вы получаете ошибки, наподобие: | |||
error C2471: cannot update program database | |||
fatal error C1083: Cannot open program database file | |||
с не измененным исходным кодом, это означает, что вы должны установить SP1!}} | |||
== Открытие солюшена == | |||
# Запустите вашу копию '''Microsoft Visual Studio'''. | |||
# Выберите '''File->Open Solution''' из меню и откройте солюшен '''Game_Episodic-2005.sln''' расположенный в директории <code>src</code> вашего мода, выберите тот, который соответствует вашей версии '''Microsoft Visual Studio'''. Заметьте, что часть имени файла с "HL2" будет соответствовать выбранному вами моду в процессе создания. Если вы создали мод через Scratch, "Scratch" появится там же. | |||
=== Обновления файлов проекта === | |||
Если вы работали над вашим модом в предыдущих версиях VS, Visual Studio предложит вам обновить файлы проекта и возможно, вы захотите, чтобы была сделана резервная копия проекта, резервную копию необходимо делать вручную, иначе, вы потеряете старую версию навсегда. | |||
{{ | {{Tip|Для удобства вы можете переименовать файл проекта с <code>whatever_2005.sln</code> на <code>whatever_2008.sln</code>.}} | ||
== | == Исправление отладочной компиляции == | ||
{{Tip|Нет необходимости компилировать отладочную версию благодаря PDB файлам, создаваемым Visual Studio в режиме релиза. Однако вы заметите, что в редких случаях при использовании PDB переменные расшифровываются не правильно. Вы так же можете не использовать Valve код <code>#ifdef DEBUG</code>. Вам решать: отладочные версии более медленные и большие, нежели финальные сборки.}} | |||
Правый-Клик > Properties на проектах Server и Client (выделите их оба). Убедившись, что вы работаете в режиме отладки (Debug) (верхний левый угол в диалоге настроек - возможно, вам сперва понадобится выбрать пункт Configuration Properties в списке слева) измените ''Configuration Properties > Linker > Input > Ignore Specific Library'' на '''<code>libc;libcd;libcmtd</code>''' (дополнительно 'd' на конце). | |||
Эта функция также нуждается в закомментировании '''линии 727''' ({{L|Orange box|OB}} код) в <code>server/memoverride.cpp</code>: | |||
<source lang=cpp> | |||
void __cdecl _invalid_parameter_noinfo(void) | |||
{ | |||
Assert(0); | |||
} | |||
</source> | |||
Можете удалить эту часть. Так же не забудьте запустить ваш мод с параметром <code>-allowdebug</code>! | |||
== Исправление | == Исправление отсутствующих символов == | ||
Если вы видите, что отсутствуют такие символы, как: ConVar_Register вам необходимо добавить tier3.lib в линкуемые вместе с модом статические библиотеки. | |||
== Отключение /Wp64 == | |||
Вы будете получать предупреждения о <code>Wp64</code>. Вы можете игнорировать их, но если они вам мешают, то сделайте следующее: правый-клик > Properties на Server и Client проектах, затем измените ''Configuration Properties > C/C++ > General > Detect 64-bit Portability Issues'' на '''<code>No</code>'''. | |||
== Установка DirectX SDK (для шейдеров) == | |||
Чтобы создать новый {{L|shader|шейдер}}, вам нужен [http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=24a541d6-0486-4453-8641-1eee9e21b282 MS DirectX SDK (Март 2009)]. После установки следуйте инструкциям ниже, чтобы внедрить его в ваш проект. | |||
# Перейдите в Tools - Options: Projects and Solutions - VC++ Directories. | |||
# Выберите "Include files" и добавьте "...\Microsoft DirectX SDK (November 2008)\Include". | |||
# Выберите "Library files" и добавьте "...\Microsoft DirectX SDK (November 2008)\Lib\x86". | |||
# В Solution Explorer нажмите правой кнопкой мыши на 'client_hl2', и выберите Properties. | |||
# В окне настроек client_hl2 выберите Linker - Input. | |||
# Выберите 'Additional Properties' и кликните на '...' справа. | |||
# Если здесь уже есть запись, создайте новую запись после нее (пробела будет достаточно, если вы не сможете создать новую линию), и напишите ' user32.lib ' без кавычек. | |||
# Повторите эти шаги для сервера. | |||
== Missing vc80.pdb == | |||
Вы можете столкнутся с этими предупреждениями после попытки компиляции с одним из внедряемых в SDK инструментов/библиотек. Вы видите это, т.к. ваш код был компилирован в VS2008 (VC9), в то время как SDK .libs были откомпилированы в VS2005 (VC8). | |||
Предупреждения не допускают компиляцию PDB файлов. Простейший способ исправления этой проблемы - компиляции библиотеки, которая создает их сама! | |||
== | == Исправление grenade_tripmine.cpp == | ||
Если запустили код hl2mp и получили ошибку <code>C2039: 'OnTakeDamage_Alive' : is not a member of 'CBaseGrenade'</code>, перейдите к '''линии 31''' в <code>shared/basegrenade_shared.h</code>: | |||
<source lang="cpp"> | |||
//Tony; Compromise! in episodic single player, inherit CBaseCombatCharacter for the barnacle interaction, otherwise this will never get called. | |||
class CBaseGrenade : | |||
#if defined( HL2_EPISODIC ) | |||
public CBaseCombatCharacter | |||
#else | |||
public CBaseAnimating | |||
#endif | |||
#if defined( GAME_DLL ) | |||
, public CDefaultPlayerPickupVPhysics | |||
#endif | |||
{ //Tony; the ugliest class definition ever, but it saves characters, or something. Should I be shot for this? | |||
DECLARE_CLASS( CBaseGrenade, CBaseAnimating ); | |||
</source> | |||
Замените это на: | |||
<source lang="cpp"> | |||
//Tony; Compromise! in episodic single player, inherit CBaseCombatCharacter for the barnacle interaction, otherwise this will never get called. | |||
class CBaseGrenade : | |||
#if defined( HL2_EPISODIC ) || defined ( HL2MP ) | |||
public CBaseCombatCharacter | |||
# | #else | ||
# | public CBaseAnimating | ||
# | #endif | ||
# | #if defined( GAME_DLL ) | ||
# | , public CDefaultPlayerPickupVPhysics | ||
# | #endif | ||
{ //Tony; the ugliest class definition ever, but it saves characters, or something. Should I be shot for this? | |||
# | #if defined( HL2_EPISODIC ) || defined ( HL2MP ) | ||
DECLARE_CLASS( CBaseGrenade, CBaseCombatCharacter); | |||
#else | |||
DECLARE_CLASS( CBaseGrenade, CBaseAnimating ); | |||
#endif | |||
</source> | |||
{{ACategory|Tutorials}} | |||
[[Category: | {{ACategory|Programming}} | ||
{{ACategory|Source SDK FAQ}} | |||
[[Category:Russian]] |
Latest revision as of 03:43, 22 August 2024
В этой статье вы узнаете как получить Source SDK для компиляции под Visual Studio 2008 и/или Visual C++ Express 2008. Есть несколько вещей, которые вам необходимо сделать для начала работы. Прежде чем начать, создайте ваш мод .



Установка Visual Studio 2008
Если у вас нет Visual Studio 2008, вы можете бесплатно получить Visual C++ Express 2008 от Microsoft.
Обновление до Service Pack 1
Если вы установили VS2008 до Августа 2008 года, вам необходимо установить SP1. Service Pack скачивается через Windows Update, однако на данный момент, требуется ручная загрузка:
- обновление Visual Studio
- обновление Visual C++ Express (выберите vcsetup.exe)
Service Pack 1 улучшает отчеты об ошибках и исправляет ошибки при работе с базой данных Intellisense, остальные улучшения не имеют прямого отношения к Source SDK.

error C2471: cannot update program database fatal error C1083: Cannot open program database fileс не измененным исходным кодом, это означает, что вы должны установить SP1!
Открытие солюшена
- Запустите вашу копию Microsoft Visual Studio.
- Выберите File->Open Solution из меню и откройте солюшен Game_Episodic-2005.sln расположенный в директории
src
вашего мода, выберите тот, который соответствует вашей версии Microsoft Visual Studio. Заметьте, что часть имени файла с "HL2" будет соответствовать выбранному вами моду в процессе создания. Если вы создали мод через Scratch, "Scratch" появится там же.
Обновления файлов проекта
Если вы работали над вашим модом в предыдущих версиях VS, Visual Studio предложит вам обновить файлы проекта и возможно, вы захотите, чтобы была сделана резервная копия проекта, резервную копию необходимо делать вручную, иначе, вы потеряете старую версию навсегда.

whatever_2005.sln
на whatever_2008.sln
.Исправление отладочной компиляции

#ifdef DEBUG
. Вам решать: отладочные версии более медленные и большие, нежели финальные сборки.Правый-Клик > Properties на проектах Server и Client (выделите их оба). Убедившись, что вы работаете в режиме отладки (Debug) (верхний левый угол в диалоге настроек - возможно, вам сперва понадобится выбрать пункт Configuration Properties в списке слева) измените Configuration Properties > Linker > Input > Ignore Specific Library на libc;libcd;libcmtd
(дополнительно 'd' на конце).
Эта функция также нуждается в закомментировании линии 727 (OB код) в server/memoverride.cpp
:
void __cdecl _invalid_parameter_noinfo(void)
{
Assert(0);
}
Можете удалить эту часть. Так же не забудьте запустить ваш мод с параметром -allowdebug
!
Исправление отсутствующих символов
Если вы видите, что отсутствуют такие символы, как: ConVar_Register вам необходимо добавить tier3.lib в линкуемые вместе с модом статические библиотеки.
Отключение /Wp64
Вы будете получать предупреждения о Wp64
. Вы можете игнорировать их, но если они вам мешают, то сделайте следующее: правый-клик > Properties на Server и Client проектах, затем измените Configuration Properties > C/C++ > General > Detect 64-bit Portability Issues на No
.
Установка DirectX SDK (для шейдеров)
Чтобы создать новый шейдер , вам нужен MS DirectX SDK (Март 2009). После установки следуйте инструкциям ниже, чтобы внедрить его в ваш проект.
- Перейдите в Tools - Options: Projects and Solutions - VC++ Directories.
- Выберите "Include files" и добавьте "...\Microsoft DirectX SDK (November 2008)\Include".
- Выберите "Library files" и добавьте "...\Microsoft DirectX SDK (November 2008)\Lib\x86".
- В Solution Explorer нажмите правой кнопкой мыши на 'client_hl2', и выберите Properties.
- В окне настроек client_hl2 выберите Linker - Input.
- Выберите 'Additional Properties' и кликните на '...' справа.
- Если здесь уже есть запись, создайте новую запись после нее (пробела будет достаточно, если вы не сможете создать новую линию), и напишите ' user32.lib ' без кавычек.
- Повторите эти шаги для сервера.
Missing vc80.pdb
Вы можете столкнутся с этими предупреждениями после попытки компиляции с одним из внедряемых в SDK инструментов/библиотек. Вы видите это, т.к. ваш код был компилирован в VS2008 (VC9), в то время как SDK .libs были откомпилированы в VS2005 (VC8).
Предупреждения не допускают компиляцию PDB файлов. Простейший способ исправления этой проблемы - компиляции библиотеки, которая создает их сама!
Исправление grenade_tripmine.cpp
Если запустили код hl2mp и получили ошибку C2039: 'OnTakeDamage_Alive' : is not a member of 'CBaseGrenade'
, перейдите к линии 31 в shared/basegrenade_shared.h
:
//Tony; Compromise! in episodic single player, inherit CBaseCombatCharacter for the barnacle interaction, otherwise this will never get called.
class CBaseGrenade :
#if defined( HL2_EPISODIC )
public CBaseCombatCharacter
#else
public CBaseAnimating
#endif
#if defined( GAME_DLL )
, public CDefaultPlayerPickupVPhysics
#endif
{ //Tony; the ugliest class definition ever, but it saves characters, or something. Should I be shot for this?
DECLARE_CLASS( CBaseGrenade, CBaseAnimating );
Замените это на:
//Tony; Compromise! in episodic single player, inherit CBaseCombatCharacter for the barnacle interaction, otherwise this will never get called.
class CBaseGrenade :
#if defined( HL2_EPISODIC ) || defined ( HL2MP )
public CBaseCombatCharacter
#else
public CBaseAnimating
#endif
#if defined( GAME_DLL )
, public CDefaultPlayerPickupVPhysics
#endif
{ //Tony; the ugliest class definition ever, but it saves characters, or something. Should I be shot for this?
#if defined( HL2_EPISODIC ) || defined ( HL2MP )
DECLARE_CLASS( CBaseGrenade, CBaseCombatCharacter);
#else
DECLARE_CLASS( CBaseGrenade, CBaseAnimating );
#endif