sluaunreal
sluaunreal copied to clipboard
armeabi-arm64是有效的Android ABI吗?
#if UE_4_24_OR_LATER
PublicAdditionalLibraries.Add(Path.Combine(externalLib, "Android/armeabi-v7a/liblua.a"));
PublicAdditionalLibraries.Add(Path.Combine(externalLib, "Android/armeabi-arm64/liblua.a"));
PublicAdditionalLibraries.Add(Path.Combine(externalLib, "Android/x86/liblua.a"));
#else
PublicAdditionalLibraries.Add(Path.Combine(externalLib, "Android/armeabi-v7a/liblua.a"));
PublicLibraryPaths.Add(Path.Combine(externalLib, "Android/armeabi-arm64"));
PublicLibraryPaths.Add(Path.Combine(externalLib, "Android/x86"));
PublicAdditionalLibraries.Add("lua");
#endif
这是源码中UBT的build脚本中的一段,UE源码中AndroidToolChain.cs中,ABI的定义如下:
static private Dictionary<string, string[]> AllArchNames = new Dictionary<string, string[]> {
{ "-armv7", new string[] { "armv7", "armeabi-v7a", } },
{ "-arm64", new string[] { "arm64", "arm64-v8a", } },
{ "-x86", new string[] { "x86", } },
{ "-x64", new string[] { "x64", "x86_64", } },
};
我理解像sluaunreal的build脚本的写法是把需要link的静态库都加进去,然后让UBT来过滤掉对于当前arch来说不需要的库,可是armeabi-arm64好像并不会起作用啊?我知道arm64-v8a是有效的ABI名称,但是armeabi-arm64是什么情况?
我感觉目前的写法会导致在build armeabi-v7a的包时,v7a和v8a的静态库都被加到了linker的参数里,但似乎因为v7a的静态库在前,所以linker就不会继续去v8a的静态库里resolve,所以最终的结果是正确的,但这还是有问题,应该把v8a的目录名修改成arm64-v8a
或arm64
,这样UBT就会正确过滤不属于当前ABI的库