sluaunreal icon indicating copy to clipboard operation
sluaunreal copied to clipboard

armeabi-arm64是有效的Android ABI吗?

Open zty0 opened this issue 3 years ago • 1 comments

#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是什么情况?

zty0 avatar Aug 03 '21 09:08 zty0

我感觉目前的写法会导致在build armeabi-v7a的包时,v7a和v8a的静态库都被加到了linker的参数里,但似乎因为v7a的静态库在前,所以linker就不会继续去v8a的静态库里resolve,所以最终的结果是正确的,但这还是有问题,应该把v8a的目录名修改成arm64-v8aarm64,这样UBT就会正确过滤不属于当前ABI的库

zty0 avatar Aug 03 '21 11:08 zty0