Compiling under Linux:zh-cn

From Valve Developer Community
Jump to: navigation, search

在 Linux 下编译

作为一个成功的多人连线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.