Ru/Compiling under VS2008: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
m (update)
m (obsolete language category)
 
(9 intermediate revisions by 6 users not shown)
Line 1: Line 1:
{{DISPLAYTITLE:Компиляция под VS2008}}{{otherlang2
{{lang|Compiling under VS2008||title=Компиляция под VS2008}}
| en = Compiling under VS2008}}


{{toc-right}}
{{toc-right}}


В этой статье вы узнаете как получить [[Source SDK:ru|Source SDK]] для компиляции под '''Visual Studio 2008''' и/или '''Visual C++ Express 2008'''. Есть несколько вещей, которые вам необходимо сделать для начала работы. Прежде чем начать, [[Create a Mod:ru|создайте ваш мод]].
В этой статье вы узнаете как получить {{L|Source SDK}} для компиляции под '''Visual Studio 2008''' и/или '''Visual C++ Express 2008'''. Есть несколько вещей, которые вам необходимо сделать для начала работы. Прежде чем начать, {{L|Create a Mod/Source|создайте ваш мод}}.


{{warning:ru|Предполагается, что вы компилируется последнюю версию исходного кода Orange Box.}}
{{Warning|Предполагается, что вы компилируете последнюю версию исходного кода Orange Box.}}


{{tip:ru|Вам ''не'' требуется устанавливать Platform SDK. VS2008 и VCE2008 включают в себя все необходимое.}}
{{Tip|Вам ''не'' требуется устанавливать Platform SDK. VS2008 и VCE2008 включают в себя все необходимое.}}


{{note:ru|Иногда вы будите сталкиваться с предупреждением "precompiled header skipped". Это нормально.}}
{{Note|Иногда вы будете сталкиваться с предупреждением "precompiled header skipped". Это нормально.}}


== Установка Visual Studio 2008 ==
== Установка Visual Studio 2008 ==
Line 25: Line 24:
Service Pack 1 улучшает отчеты об ошибках и исправляет ошибки при работе с базой данных Intellisense, остальные улучшения не имеют прямого отношения к Source SDK.
Service Pack 1 улучшает отчеты об ошибках и исправляет ошибки при работе с базой данных Intellisense, остальные улучшения не имеют прямого отношения к Source SDK.


{{warning:ru|Если вы получаете ошибки, наподобие:
{{Warning|Если вы получаете ошибки, наподобие:
  error C2471: cannot update program database
  error C2471: cannot update program database
  fatal error C1083: Cannot open program database file
  fatal error C1083: Cannot open program database file
Line 39: Line 38:
Если вы работали над вашим модом в предыдущих версиях VS, Visual Studio предложит вам обновить файлы проекта и возможно, вы захотите, чтобы была сделана резервная копия проекта, резервную копию необходимо делать вручную, иначе, вы потеряете старую версию навсегда.
Если вы работали над вашим модом в предыдущих версиях VS, Visual Studio предложит вам обновить файлы проекта и возможно, вы захотите, чтобы была сделана резервная копия проекта, резервную копию необходимо делать вручную, иначе, вы потеряете старую версию навсегда.


{{tip:ru|Для удобства вы можете переименовать файл проекта с <code>whatever_2005.sln</code> на <code>whatever_2008.sln</code>.}}
{{Tip|Для удобства вы можете переименовать файл проекта с <code>whatever_2005.sln</code> на <code>whatever_2008.sln</code>.}}


== Исправление отладочной компиляции ==
== Исправление отладочной компиляции ==


{{tip:ru|Нет необходимости компилировать отладочную версию благодаря PDB файлам, создаваемым Visual Studio в режиме релиза. Однако вы заметите, что в редких случаях при использовании PDB переменные расшифровываются не правильно. Вы так же можете не использовать Valve код <code>#ifdef DEBUG</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' на конце).
Правый-Клик > Properties на проектах Server и Client (выделите их оба). Убедившись, что вы работаете в режиме отладки (Debug) (верхний левый угол в диалоге настроек - возможно, вам сперва понадобится выбрать пункт Configuration Properties в списке слева) измените ''Configuration Properties > Linker > Input > Ignore Specific Library'' на '''<code>libc;libcd;libcmtd</code>''' (дополнительно 'd' на конце).


Эта функция также нуждается в закомментировании '''линии 727''' ([[Orange box|OB]] код) в <code>server/memoverride.cpp</code>:
Эта функция также нуждается в закомментировании '''линии 727''' ({{L|Orange box|OB}} код) в <code>server/memoverride.cpp</code>:


<source lang=cpp>
<source lang=cpp>
Line 60: Line 59:
== Исправление отсутствующих символов ==
== Исправление отсутствующих символов ==


Если вы видите, что отсутствуют такие символы, как: ConVar_Register вам необходимо добавить tier3.lib в папку Link Libraries.
Если вы видите, что отсутствуют такие символы, как: ConVar_Register вам необходимо добавить tier3.lib в линкуемые вместе с модом статические библиотеки.


== Отключение /Wp64 ==
== Отключение /Wp64 ==


Вы будите получать предупреждения о <code>Wp64</code>. Вы можете игнорировать их, но если они вам мешают, то сделайте следующее: правый-клик > Properties на Server и Client проектах, затем измените ''Configuration Properties > C/C++ > General > Detect 64-bit Portability Issues'' на '''<code>No</code>'''.
Вы будете получать предупреждения о <code>Wp64</code>. Вы можете игнорировать их, но если они вам мешают, то сделайте следующее: правый-клик > Properties на Server и Client проектах, затем измените ''Configuration Properties > C/C++ > General > Detect 64-bit Portability Issues'' на '''<code>No</code>'''.


== Установка DirectX SDK (для шейдеров) ==
== Установка DirectX SDK (для шейдеров) ==


Чтобы создать новый [[shader|шейдер]], вам нужен [http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=24a541d6-0486-4453-8641-1eee9e21b282 MS DirectX SDK (Март 2009)]. После установки следуйте инструкциям ниже, чтобы внедрить его в ваш проект.
Чтобы создать новый {{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.
# Перейдите в Tools - Options: Projects and Solutions - VC++ Directories.
Line 124: Line 123:
</source>
</source>


[[Category:Tutorials:ru]]
{{ACategory|Tutorials}}
[[Category:Programming:ru]]
{{ACategory|Programming}}
[[Category:Source SDK FAQ:ru]]
{{ACategory|Source SDK FAQ}}
[[Category:Russian]]
[[Category:Russian]]

Latest revision as of 03:43, 22 August 2024

English (en)Русский (ru)中文 (zh)Translate (Translate)

В этой статье вы узнаете как получить Source SDK(en) для компиляции под Visual Studio 2008 и/или Visual C++ Express 2008. Есть несколько вещей, которые вам необходимо сделать для начала работы. Прежде чем начать, создайте ваш мод(en).

Warning.pngПредупреждение:Предполагается, что вы компилируете последнюю версию исходного кода Orange Box.
Tip.pngСовет:Вам не требуется устанавливать Platform SDK. VS2008 и VCE2008 включают в себя все необходимое.
Note.pngПримечание:Иногда вы будете сталкиваться с предупреждением "precompiled header skipped". Это нормально.

Установка Visual Studio 2008

Если у вас нет Visual Studio 2008, вы можете бесплатно получить Visual C++ Express 2008 от Microsoft.

Обновление до Service Pack 1

Если вы установили VS2008 до Августа 2008 года, вам необходимо установить SP1. Service Pack скачивается через Windows Update, однако на данный момент, требуется ручная загрузка:

Service Pack 1 улучшает отчеты об ошибках и исправляет ошибки при работе с базой данных Intellisense, остальные улучшения не имеют прямого отношения к Source SDK.

Warning.pngПредупреждение:Если вы получаете ошибки, наподобие:
error C2471: cannot update program database
fatal error C1083: Cannot open program database file
с не измененным исходным кодом, это означает, что вы должны установить SP1!

Открытие солюшена

  1. Запустите вашу копию Microsoft Visual Studio.
  2. Выберите File->Open Solution из меню и откройте солюшен Game_Episodic-2005.sln расположенный в директории src вашего мода, выберите тот, который соответствует вашей версии Microsoft Visual Studio. Заметьте, что часть имени файла с "HL2" будет соответствовать выбранному вами моду в процессе создания. Если вы создали мод через Scratch, "Scratch" появится там же.

Обновления файлов проекта

Если вы работали над вашим модом в предыдущих версиях VS, Visual Studio предложит вам обновить файлы проекта и возможно, вы захотите, чтобы была сделана резервная копия проекта, резервную копию необходимо делать вручную, иначе, вы потеряете старую версию навсегда.

Tip.pngСовет:Для удобства вы можете переименовать файл проекта с whatever_2005.sln на whatever_2008.sln.

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

Tip.pngСовет:Нет необходимости компилировать отладочную версию благодаря PDB файлам, создаваемым Visual Studio в режиме релиза. Однако вы заметите, что в редких случаях при использовании PDB переменные расшифровываются не правильно. Вы так же можете не использовать Valve код #ifdef DEBUG. Вам решать: отладочные версии более медленные и большие, нежели финальные сборки.

Правый-Клик > Properties на проектах Server и Client (выделите их оба). Убедившись, что вы работаете в режиме отладки (Debug) (верхний левый угол в диалоге настроек - возможно, вам сперва понадобится выбрать пункт Configuration Properties в списке слева) измените Configuration Properties > Linker > Input > Ignore Specific Library на libc;libcd;libcmtd (дополнительно 'd' на конце).

Эта функция также нуждается в закомментировании линии 727 (OB(en) код) в 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 (для шейдеров)

Чтобы создать новый шейдер(en), вам нужен MS DirectX SDK (Март 2009). После установки следуйте инструкциям ниже, чтобы внедрить его в ваш проект.

  1. Перейдите в Tools - Options: Projects and Solutions - VC++ Directories.
  2. Выберите "Include files" и добавьте "...\Microsoft DirectX SDK (November 2008)\Include".
  3. Выберите "Library files" и добавьте "...\Microsoft DirectX SDK (November 2008)\Lib\x86".
  4. В Solution Explorer нажмите правой кнопкой мыши на 'client_hl2', и выберите Properties.
  5. В окне настроек client_hl2 выберите Linker - Input.
  6. Выберите 'Additional Properties' и кликните на '...' справа.
  7. Если здесь уже есть запись, создайте новую запись после нее (пробела будет достаточно, если вы не сможете создать новую линию), и напишите ' user32.lib ' без кавычек.
  8. Повторите эти шаги для сервера.

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