编译AzerothCore模块时出现未定义引用错误求助
AzerothCore编译模块时出现未定义引用链接错误的解决办法
编译时触发的链接错误信息如下:
/usr/bin/ld: ../../../modules/libmodules.a(ModulesLoader.cpp.o): in function `AddModulesScripts()': /root/azerothcore/build/modules/gen_scriptloader/static/ModulesLoader.cpp:60: undefined reference to `Addmod_1v1_arena_masterScripts()' /usr/bin/ld: /root/azerothcore/build/modules/gen_scriptloader/static/ModulesLoader.cpp:61: undefined reference to `Addmod_boss_announcer_masterScripts()' /usr/bin/ld: /root/azerothcore/build/modules/gen_scriptloader/static/ModulesLoader.cpp:63: undefined reference to `Addmod_npc_buffer_masterScripts()' /usr/bin/ld: /root/azerothcore/build/modules/gen_scriptloader/static/ModulesLoader.cpp:64: undefined reference to `Addmod_npc_spectator_masterScripts()' /usr/bin/ld: /root/azerothcore/build/modules/gen_scriptloader/static/ModulesLoader.cpp:65: undefined reference to `Addmod_reward_shop_masterScripts()' /usr/bin/ld: /root/azerothcore/build/modules/gen_scriptloader/static/ModulesLoader.cpp:66: undefined reference to `Addmod_solocraft_masterScripts()' clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [src/server/apps/CMakeFiles/worldserver.dir/build.make:175: src/server/apps/worldserver] Error 1 make[1]: *** [CMakeFiles/Makefile2:1086: src/server/apps/CMakeFiles/worldserver.dir/all] Error 2 make: *** [Makefile:130: all] Error 2
可以按以下步骤排查解决:
- 检查模块目录结构:确保所有下载的模块都放在AzerothCore根目录的
modules/文件夹下,每个模块是独立的子目录(比如modules/1v1_arena_master),不要出现嵌套或路径错误。 - 验证模块的CMake配置:每个模块的根目录必须有正确的
CMakeLists.txt文件,文件里要包含编译源文件、链接依赖,以及正确注册脚本加载函数的逻辑,缺少这个文件会导致模块无法被编译识别。 - 重新生成CMake构建文件:进入build目录,清理旧缓存后重新生成配置:
cd /root/azerothcore/build rm -rf CMakeCache.txt CMakeFiles/ cmake ../ -DCMAKE_INSTALL_PREFIX=/your/install/path -DCMAKE_BUILD_TYPE=Release - 同步核心与模块的最新代码:即使标注适配master分支,也可能存在代码差异,先拉取AzerothCore master分支的最新代码,再更新模块代码:
cd /root/azerothcore git pull origin master # 进入每个模块目录拉取最新代码 cd modules/1v1_arena_master git pull origin master # 其他模块重复上述git pull操作 - 清理缓存后重新编译:避免旧编译缓存干扰,执行完整的清理和编译:
cd /root/azerothcore/build make clean make -j$(nproc) - 确认模块已被启用:如果是通过CMake交互式配置(比如ccmake),要确保对应模块的启用选项被勾选;如果用命令行,需在cmake时添加启用参数,比如
-DENABLE_MODULE_1V1_ARENA_MASTER=ON,参数名称可查看模块的CMakeLists.txt文件。
内容的提问来源于stack exchange,提问作者Makavełi The Don
相关产品推荐
相关产品推荐

