Zh/Compiling under Linux: Difference between revisions

From Valve Developer Community
< Zh
Jump to navigation Jump to search
No edit summary
m (manual fix test)
Line 1: Line 1:
[[Category:程�?]]
[[Category:程序]]
作为一个�?功的多人连线MOD,一个Linux的�?务器是必�?�?�少的,构建Linux�?务端二进制文件的大�?�?�?�的基础工作是自动完�?的,本文介�?了构建Linux�?务端所需�?的环境�?��?制.
作为一个成功的多人连线MOD,一个Linux的服务器是必不可少的,构建Linux服务端二进制文件的大量繁杂的基础工作是自动完成的,本文介绍了构建Linux服务端所需要的环境及配制.  


==系统�?求==
==系统要求==
在Linux下编译SDK需�?以下工具. 任何其它版本会导致编译或�?行时的错误.
在Linux下编译SDK需要以下工具. 任何其它版本会导致编译或运行时的错误.
 
*GCC 3.4.1 或更高版本 ( http://gcc.gnu.org ).
*Xerces XML parser 2.6.0 或更高版本 ( http://xml.apache.org/xerces-c/ ).
*GLIBC 2.3.2 或更高版本.
 
Slackware 10.0 ( http://www.slackware.org/ ) 是个不错的创建编译环境的工具.  


* GCC 3.4.1 或更高版本 ( http://gcc.gnu.org ).
* Xerces XML parser 2.6.0 或更高版本 ( http://xml.apache.org/xerces-c/ ).
* GLIBC 2.3.2 或更高版本.


Slackware 10.0 ( http://www.slackware.org/ ) 是个?错的创建编译环境的工具.


==设置Makelife==
==设置Makelife==
作为编译过程的一部分,需�?将在windows下编译时使用的Microsoft Visual C++工程文件转�?�为makefile,在进行转�?�时需�?�?置几个�?�数,他们被包括在linux_sdk/Makefile,至少需�?�?置以下�?�数(注�?, �?�?使用"~"作为你的主目录, 因为部分make过程�?能�?�解):
作为编译过程的一部分,需要将在windows下编译时使用的Microsoft Visual C++工程文件转换为makefile,在进行转换时需要配置几个参数,他们被包括在linux_sdk/Makefile,至少需要配置以下参数(注意, 不要使用"~"作为你的主目录, 因为部分make过程不能理解):  
 
* '''MOD_PROJ''', 在Windows下编译使用的工程文件�??.
* '''MOD_CONFIG''', 在编译Linux版本mod时使用的培�?选项,一般与Release Win32(MSVC中)的选项是相�?�的,决定此�?�数最简�?�的方法是�?留默认选项,然�?��?行make过程并从生�?的makefile中选择适当的选项.
* '''GAME_DIR''', 游�?的安装路径.
* '''CC, CPLUS, CLINK, CPP_LIB''', 这些�?�数应该指�?�你的 GCC 3.4.1. 安装,分别为C编译器。C++编译路�?,C连接器(这三项一般都�?�设为gcc)�?�C++库路径.
* '''XERCES_INC_DIR, XERCES_LIB_DIR''', xerce库的安装目录.


*'''MOD_PROJ''', 在Windows下编译使用的工程文件名.
*'''MOD_CONFIG''', 在编译Linux版本mod时使用的培植选项,一般与Release Win32(MSVC中)的选项是相同的,决定此参数最简单的方法是保留默认选项,然后运行make过程并从生成的makefile中选择适当的选项.
*'''GAME_DIR''', 游戏的安装路径.
*'''CC, CPLUS, CLINK, CPP_LIB''', 这些参数应该指向你的 GCC 3.4.1. 安装,分别为C编译器。C++编译路经,C连接器(这三项一般都可设为gcc)及C++库路径.
*'''XERCES_INC_DIR, XERCES_LIB_DIR''', xerce库的安装目录.


当这些�?�数设定�?�,�?�需简�?�的�?行:
当这些参数设定后,只需简单的运行:


<code>make</code>
<code>make</code>


有些人报告了一个 bug, 当�?行 vcpm 时�?求"export LD_LIBRARY_PATH=~/source/bin". 这里是一个修正的补�?. (如果你没有应用 [[SDK Known Issues List#First_big_pass_at_-Wall_and_consistent_code]] 的修正, 必须使用 -D 选项.)
有些人报告了一个 bug, 当运行 vcpm 时要求"export LD_LIBRARY_PATH=~/source/bin". 这里是一个修正的补丁. (如果你没有应用 [[SDK Known Issues List#First_big_pass_at_-Wall_and_consistent_code]] 的修正, 必须使用 -D 选项.)  


<pre>
<pre>
Line 56: Line 57:
</pre>
</pre>


这将编译vcpm程�?,使用由这个程�?从MSVC工程文件(.vcproject)生�?的makefile片段以�?�以上设定的�?�数�?�编译你的mod.
这将编译vcpm程序,使用由这个程序从MSVC工程文件(.vcproject)生成的makefile片段以及以上设定的参数来编译你的mod.  


如果你在使用 GCC, 你�?�能会�?��? [[SDK Known Issues List#Getting the SDK to work under -Wall -Werror]].
如果你在使用 GCC, 你可能会参见 [[SDK Known Issues List#Getting the SDK to work under -Wall -Werror]].


==�?行MOD==
==运行MOD==
�?�?行MOD,将make过程生�?的文件�?制到<code><mod dir>/bin/server_i486.so</code>, 并用适当的 <code>-game</code> �?�数�?行 <code>srcds_run</code>.
要运行MOD,将make过程生成的文件复制到<code><mod dir>/bin/server_i486.so</code>, 并用适当的 <code>-game</code> 参数运行 <code>srcds_run</code>..

Revision as of 10:00, 27 November 2005

作为一个成功的多人连线MOD,一个Linux的服务器是必不可少的,构建Linux服务端二进制文件的大量繁杂的基础工作是自动完成的,本文介绍了构建Linux服务端所需要的环境及配制.

系统要求

在Linux下编译SDK需要以下工具. 任何其它版本会导致编译或运行时的错误.

Slackware 10.0 ( http://www.slackware.org/ ) 是个不错的创建编译环境的工具.


设置Makelife

作为编译过程的一部分,需要将在windows下编译时使用的Microsoft Visual C++工程文件转换为makefile,在进行转换时需要配置几个参数,他们被包括在linux_sdk/Makefile,至少需要配置以下参数(注意, 不要使用"~"作为你的主目录, 因为部分make过程不能理解):

  • MOD_PROJ, 在Windows下编译使用的工程文件名.
  • MOD_CONFIG, 在编译Linux版本mod时使用的培植选项,一般与Release Win32(MSVC中)的选项是相同的,决定此参数最简单的方法是保留默认选项,然后运行make过程并从生成的makefile中选择适当的选项.
  • GAME_DIR, 游戏的安装路径.
  • CC, CPLUS, CLINK, CPP_LIB, 这些参数应该指向你的 GCC 3.4.1. 安装,分别为C编译器。C++编译路经,C连接器(这三项一般都可设为gcc)及C++库路径.
  • XERCES_INC_DIR, XERCES_LIB_DIR, xerce库的安装目录.

当这些参数设定后,只需简单的运行:

make

有些人报告了一个 bug, 当运行 vcpm 时要求"export LD_LIBRARY_PATH=~/source/bin". 这里是一个修正的补丁. (如果你没有应用 SDK Known Issues List#First_big_pass_at_-Wall_and_consistent_code 的修正, 必须使用 -D 选项.)

--- Makefile.vcpm       Sat Oct  1 22:26:26 2005
+++ Makefile.vcpm.bak   Sat Oct  1 22:25:43 2005
@@ -14,12 +14,12 @@
 TIER1_OBJ_DIR=$(BUILD_OBJ_DIR)/vcpm/public

 #we use custome CFLAGS because the base ones interfere with XERCES
-CFLAGS= -w -fpermissive -D_LINUX -DNDEBUG -D_alloca=alloca -D_snprintf=snprintf -D_vsnprintf=vsnprintf $(ARCH_CFLAGS)
+CFLAGS= -w -fpermissive -D_LINUX -DNDEBUG $(ARCH_CFLAGS)
 #DEBUG = -g -ggdb
 #CFLAGS+= $(DEBUG)

 INCLUDEDIRS=-I$(PUBLIC_SRC_DIR) -I$(XERCES_INC_DIR) -I$(UTIL_COMMON_SRC_DIR) -I$(TIER1_PUBLIC_SRC_DIR)
-LDFLAGS_VC=-lm -ldl -L$(XERCES_LIB_DIR) -lxerces-c $(GAME_DIR)/bin/tier0_i486.so $(GAME_DIR)/bin/vstdlib_i486.so
+LDFLAGS_VC=-lm -ldl -Wl,-rpath -Wl,$(GAME_DIR)/bin -L$(XERCES_LIB_DIR) -lxerces-c $(GAME_DIR)/bin/tier0_i486.so $(GAME_DIR)/bin/vstdlib_i486.so

 DO_CC=$(CPLUS) $(INCLUDEDIRS) -w $(CFLAGS) -DARCH=$(ARCH) -o $@ -c $<

@@ -51,7 +51,7 @@
        $(DO_CC)

 $(TIER1_OBJ_DIR)/%.o: $(TIER1_SRC_DIR)/%.cpp
-       $(DO_CC) -Dstricmp=strcasecmp -Dstrcmpi=strcasecmp
+       $(DO_CC)

 clean:
        -rm -rf $(VCPM_OBJ_DIR)

这将编译vcpm程序,使用由这个程序从MSVC工程文件(.vcproject)生成的makefile片段以及以上设定的参数来编译你的mod.

如果你在使用 GCC, 你可能会参见 SDK Known Issues List#Getting the SDK to work under -Wall -Werror.

运行MOD

要运行MOD,将make过程生成的文件复制到<mod dir>/bin/server_i486.so, 并用适当的 -game 参数运行 srcds_run..