amxx模块开发入门002-使用AMBuild工具编译模块(Linux)
条评论本篇文章将介绍如何使用AMBuild工具来编译我们的module源码,生成Linux版本的*_amxx_i386.so模块文件。
工具环境
操作系统:ubuntu 22.04 桌面版 64位(可以装在VMWare等虚拟机)
编译工具:i386编译工具系列(32位)、AMBuild编译工具
开发工具:amxmodx、metamod、hlsdk、mysql等sdk
操作系统安装和配置
首先我这里用的是VMWare虚拟机,使用NAT方式上网,安装的是ubuntu 22.04桌面版,系统安装完成后,关闭防火墙(默认应该是关闭的),以及安装开启openssh服务,当然还有VM TOOLS(在VMWare中会自动安装)。
1 | # 开启openssh远程连接服务 |
编译工具安装和配置
安装32位编译工具(cs1.6是使用32位编译的,64位的会出错的),安装包括gcc、g++、clang、nasm等等。
1 | sudo apt-get install gcc g++ clang nasm |
开发工具安装和配置
首先在工作目录下创建名为sdk的文件夹,即/home/wudics/sdk,其中wudics是你ubuntu的用户名。
然后cd进入sdk文件夹,通过git命令clone以下sdk开发包到本地。
另外,如果没有git命令,请先自行安装git工具。
1 | git clone https://github.com/wudics/ambuild.git |
此时,目录结构应该是这样的
1 | /home/wudics/sdk/ambuild |
注意,文件夹名称不能修改成其他的,否则可能ambuild时会无法识别出正确的路径
版本问题,如果版本与此时不一致的话,可能会影响兼容性,导致后续的操作无法正确完成。
ambuild此时版本是2.2版本(amxmodx此时使用的是2.0版本,不过无须担心,是可以兼容的)。
metamod-hl1已经很久没有更新了,无需考虑版本问题。
hlsdk也是很久没有更新了,也不用担心版本问题。
amxmodx此时的版本是1.8.x,它里边还有个子项目amtl,位于amxmodx/public/amtl。
如果编译时因为amtl版本问题导致出错的话,可以在我的fork仓库中找到此时版本的amtl替换即可。
地址是https://github.com/wudics/amtl。
初始化编译
初始化编译,意思是我们需要先对amxmodx进行编译。
成功对amxmodx进行编译之后才对我们自己开发的module进行编译。
1 | # 进入sdk/amxmodx文件夹 |
此时,可能会出现cc1: all warnings being treated as errors的错误提示,其实是gcc编译器加了-Werror参数导致的,意思就是所有的warning都会进行error报错。为了能够正常编译,一是修改源码,二是去掉-Werror参数。
我们这里为了方便,就先把-Werror去掉了。
使用编辑器打开amxmodx/AMBuildScript文件,找到configure_gcc中的-Werror并把它注释起来即可,修改后如下:
1 | def configure_gcc(self, cxx): |
然后,重新cd进入amxmodx/build目录,执行ambuild命令重新编译。
注意,此时已经无需再执行python ../configure.py命令配置,可直接ambuild编译。
1 | cd build |
当提示Build succeeded.后,表示整个工程都编译成功了。
在build/modules目录下,我们可以看到很多编译好的module模块,这是系统自带的一些有用的模块。
之后,我们编译出来的module也会在这个目录下生成。
开发自己的模块
创建模块项目
首先,我们也需要按照amxmodx的目录结构,来构建我们的module模块项目。
先进入到amxmodx/modules目录下,在这里创建我们的module模块项目(我这里在github仓库提供了一个template空项目mymodule2,你可以直接用来编译,以后你也可以基于这个模板来开发自己的module模块)。
1 | #wudics@wudics-virtual-machine:~/sdk/amxmodx/modules$ |
修改模块名称
其中,czfun是我们模块项目的文件夹名称,接下来我们也要用czfun来命名我们的模块。
用编辑器打开amxmodx/modules/czfun/AMBuilder文件,找到下面的代码:
1 | binary = AMXX.MetaModule(builder, 'mymodule2') |
把mymodule2修改成czfun,这里修改的是编译生成后的模块名称。
1 | binary = AMXX.MetaModule(builder, 'czfun') |
添加模块编译代码
这里的意思就是把我们创建的czfun模块,添加到ambuild的编译链中,是ambuild能够找到我们的模块并进行编译。
用编辑器打开amxmodx/AMBuildScript文件,在最底下,找到如下内容:
1 | builder.RunBuildScripts( |
然后,在其底部添加czfun模块编译子脚本的路径:'modules/czfun/AMBuilder',
1 | builder.RunBuildScripts( |
开始编译模块
继续cd进入之前我们创建的build文件夹,执行ambuild命令即可。
1 | cd build |
提示编译成功后,我们在build/modules/czfun目录下,就可以看到我们编译的模块了。
在Linux编译模块,通常会加上特殊的后缀,即czfun_amxx_i386.so,就是我们的模块文件了。
参考文献
AMBuild WiKi & Tutorial
Building AMX Mod X with AMBuild
Building Sourcemod
AMBuild 2.2 API
AMBuild 2.1 API
AMBuild 2.0 API