UE5版本Windows构建pc平台报错googletest的问题记录
文章目录
- 报错信息
- 排查解决过程
- 基本情况
- 验证猜想
报错信息
近期使用UE5以上的版本在构建demo,报错有重复的gtest符号,报错信息部分如下
gtest.lib(gtest-all.obj) : error LNK2005: "public: int __cdecl testing::TestPartResultArray::size(void)const " (?size@TestPartResultArray@testing@@QEBAHXZ) already defined in gtest.lib(gtest-all.obj)
排查解决过程
基本情况
1.demo中确实是主动引入了googletest来做单元测试。
2.在之前UE4.18-4.25版本的Windows平台构建demo时都没有遇到。
结合上述两个点,初步可以认为
1.gtest.lib这个库本身没问题
2.由于有符号重复,怀疑是UE高版本自己引入了googletest导致的问题
验证猜想
1.对gtest.lib的库做符号检查,可以确认是没有重复符号的。
#mac上 nm -C gtest.lib #windows上 dumpbin /SYMBOLS gtest.lib
2.在UE的不同版本中,直接搜索该重复的符号。
-
在高版本的UE上确实有使用gtest
-
直接打开一个文件,跳转到gtest.h的地方。可以看到确实是有自带一个googletest的模块
-
查找引用googletest的插件,屏蔽其启用
-
可以考虑直接把这个模块在win64上干掉。直接改成"PlatformAllowList": []。不然就得找到那个依赖了这个RigLogic插件的源头插件,将其禁用。
最后重新尝试构建,不再构建报错了,成功构建出demo.exe。