Compiling under Linux

From Valve Developer Community
< Zh
Jump to: navigation, search
English (en)Русский (ru)中文 (zh)Translate (Translate)
Underlinked - Logo.png
此文章需要更多Wikipedia icon 与其他文章的链接以帮助Wikipedia icon 将其集成到百科全书中。请通过在现有文本中添加Wikipedia icon 与上下文相关的链接来帮助改进此文章。
2024年1月
Icon-broom.png
This article or section needs to be updated to include current information regarding the subject。
Remember to check for any notes left by the tagger at this article's talk page.

在 Linux 下编译

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

系统要求

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

Slackware 10.0 是个不错的创建编译环境的工具.

设置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.