Visual Studio编译Unreal Engine遇E1393/E2487错误,求CARLA安装场景下的解决指引
解决CARLA编译Unreal Engine时的DLL接口声明错误
错误根源
这两个编译错误均因重复添加DLL导出/导入修饰符引发:
- E1393:已用
dllexport/dllimport标记的类,其成员被再次添加同类修饰符 - E2487:
SpillCellID作为DLL接口类的内部成员,自身又被单独标记为DLL接口
修复步骤
1. 定位错误代码位置
在Visual Studio错误列表中双击错误条目,直接跳转至对应的头文件/源文件,找到包含SpillCellID的类定义,以及触发E1393的成员声明。
2. 移除重复的DLL修饰符
- 针对E1393:若类已通过
CARLA_API(或自定义的dllexport/dllimport宏)声明,删除成员变量/函数前的同类宏。
错误示例:
修复后:class CARLA_API MyClass { public: CARLA_API void MyFunction(); // 重复添加修饰符,触发E1393 };class CARLA_API MyClass { public: void MyFunction(); // 移除成员前的CARLA_API }; - 针对E2487:检查
SpillCellID的声明,若它是某个DLL接口类的内部成员,删除自身的dllexport/dllimport修饰符。
错误示例:
修复后:class CARLA_API RoadNetwork { public: CARLA_API class SpillCellID { ... }; // 成员类重复修饰,触发E2487 };class CARLA_API RoadNetwork { public: class SpillCellID { ... }; // 移除SpillCellID前的CARLA_API };
3. 校验CARLA预定义宏的一致性
确保项目中CARLA_API宏的定义逻辑正确:编译DLL模块时定义CARLA_BUILDING_DLL,此时宏展开为dllexport;引用DLL时不定义该宏,宏自动展开为dllimport。宏定义混乱也会导致重复修饰问题。
4. 重新生成项目
点击Visual Studio菜单「生成」→「清理解决方案」,清理编译缓存后重新生成Unreal Engine相关的CARLA项目,验证错误是否消除。
内容的提问来源于stack exchange,提问作者Farhan Javed
相关产品推荐
相关产品推荐

