使用Visual Studio编译UE5 Linux专用服务器遇ld.lld链接错误
解决UE5 Linux专用服务器编译时Assimp库链接错误问题
1. 确认插件禁用配置生效
检查MyGameServer.Target.cs的配置是否正确,确保DisablePlugins.Add("UE4_Assimp");处于正确位置,示例如下:
public class MyGameServerTarget : TargetRules { public MyGameServerTarget(TargetInfo Target) : base(Target) { Type = TargetType.Server; DefaultBuildSettings = BuildSettingsVersion.V2; IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_1; ExtraModuleNames.AddRange(new string[] { "MyGame" }); // 确保该行在模块声明之后,保证配置生效 DisablePlugins.Add("UE4_Assimp"); } }
同时打开UE编辑器的插件管理器,确认Server目标下UE4_Assimp插件已被禁用。
2. 清理项目中残留的Assimp引用
- 全局搜索项目所有代码文件,移除
#include "Assimp"等相关头文件引用,以及所有Assimp相关的函数调用、类型声明。 - 检查项目及其他依赖模块的
Build.cs文件,移除PublicDependencyModuleNames/PrivateDependencyModuleNames中与UE4_Assimp相关的条目。
3. 排查WSL路径映射问题
ld.lld报错的路径可能存在Windows与WSL路径不兼容的问题:
- 查看错误日志中libassimp.so的路径,若为Windows格式(如
\\wsl$\Ubuntu\...),尝试将库文件复制到UE项目的ThirdParty/Linux目录下,在插件或项目Build.cs中使用相对路径引用:
if (Target.Platform == UnrealTargetPlatform.Linux) { string ThirdPartyPath = Path.Combine(ModuleDirectory, "../../ThirdParty"); PublicAdditionalLibraries.Add(Path.Combine(ThirdPartyPath, "Linux", "libassimp.so")); }
- 确保WSL环境下libassimp.so的权限正确,执行
chmod 755 /path/to/libassimp.so赋予可执行权限。
4. 彻底清理编译缓存
- 删除项目根目录下的
Intermediate、Binaries文件夹。 - 在Visual Studio中执行Clean Solution,再重新执行Build Solution。
- 若问题仍存在,可尝试删除UE引擎的
DerivedDataCache目录(注意备份重要缓存文件)。
5. 检查模块依赖链
确认是否有其他模块(项目模块或第三方插件)依赖UE4_Assimp模块:
- 检查所有模块的
Build.cs文件,移除对UE4_Assimp的依赖声明。 - 查看编译日志,若UE4_Assimp模块仍被编译,说明存在隐式依赖,需定位并解除该依赖。
6. 临时应急方案(不推荐长期使用)
若以上步骤均无效,可在Server目标的Build.cs中添加链接选项忽略未定义符号,临时绕过链接错误:
if (Target.Platform == UnrealTargetPlatform.Linux) { PublicLinkOptions.Add("-Wl,--unresolved-symbols=ignore-all"); }
此方案仅用于临时验证,需尽快找到并解决根源问题。
内容的提问来源于stack exchange,提问作者Zi1mann
相关产品推荐
相关产品推荐

