Skip to content

想请教一下如何才能成功安装 metamod #24

@jeffcwj

Description

@jeffcwj

如题,这是我的编译记录 https://www.xuebuhui.cn/t/topic/124
按照 官方安装 metamod,在控制台执行 meta version 提示没有这个指令,也尝试了 1.10 到 1.12 的多个版本,均没有效果
1月25日晚上开始研究 cm 的编译,fork了您的cm仓库,也按照提示复制了一份带_srv后缀的 libtier0.so 和 libvstdlib.so,安装后出现的问题仍和上面的一样
自己尝试解决问题,查看 metamod 的日志

L 01/25/2025 - 01:56:07: Detected engine 17 but could not load: /home/steam/Steam/cs_source/cm/addons/metamod/bin/metamod.2.sdk2013.so: undefined symbol: ThreadInterlockedAssignIf

发现符号未定义,结合搜索源码,搜索一下自己编译的 libtier0.so 符号和官方的对比,发现

root@Ubuntu22:/home/deepdc/cssource/clientmod-android# nm -D build/tier0/libtier0.so | grep ThreadInterlockedAssignIf
0000d040 T ThreadInterlockedAssignIf64

我的只剩下 ThreadInterlockedAssignIf64,而官方两个都有。ThreadInterlockedAssignIf 疑似被优化了
由于对c++不熟悉,我按照chatgpt的提示,在源码中对相关的函数前加入__attribute__((noinline)) __attribute__((visibility("default"))) 并用 export "C" 代码块包裹防止出现C++特性的符号。再次编译运行服务端的时候,动态库成功加载了,metamod 报错日志不再产生,但是控制台输入 meta version 或任何 meta 相关指令,发现不会提示指令不存在,而是没有任何输出。
这里有一个疑问,为什么mm加载的是 metamod.2.sdk2013.so,而不是 metamod.2.css.so,目前对现状没有什么思路,也只能先尝试 sourcemod了

sourcemod 这边安装运行后,进游戏里,执行任意内置插件指令,如 !admin 均有反应。但是服务端启动过程中,sourcemod 也会产生错误日志,如下

L 01/25/2025 - 17:03:58: SourceMod error session started
L 01/25/2025 - 17:03:58: Info (map "de_dust2_FPS_Final") (file "/home/steam/Steam/cs_source_cm/cm/addons/sourcemod/logs/errors_20250125.log")
L 01/25/2025 - 17:03:58: [SM] Unrecognized library "engine" (gameconf "/home/steam/Steam/cs_source_cm/cm/addons/sourcemod/gamedata/sdktools.games/engine.sdk2013.txt")
L 01/25/2025 - 17:03:58: [SDKTOOLS] Signature for FireOutput not found in gamedata
L 01/25/2025 - 17:03:58: [SDKTOOLS] Failed to find PlayerRunCmd offset - OnPlayerRunCmd forward disabled.
L 01/25/2025 - 17:03:58: [SM] Unable to load plugin "[CSS]DM101.smx": Required extension "cstrike" file("games/game.cstrike.ext") not running
L 01/25/2025 - 17:03:58: [SM] Unable to load plugin "DM.smx": Required extension "cstrike" file("games/game.cstrike.ext") not running

sourcemod 没有认出 engine 库是什么游戏,某些函数签名也没找到,应该也是认错游戏导致的。下面两个插件的错误差不多
我目前怀疑 metamod 识别错游戏了,但是对起源引擎的认识不够充分,百度和谷歌上与问题相关的资料也不多,目前还不知道怎么解决这个问题
希望能够得到您的指导,提前感谢您的帮助!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions