我正在尝试将一些本机表单页面集成到现有的 Xamarin.iOS 应用程序,以便可以在多个平台之间共享这些页面。我想对这些 Native Forms 页面上的图像使用 Xamarin.FFImageLoading。这通常是一项简单的任务,我以前做过,没有任何问题。
我在使用这个特定的 Xamarin.iOS 应用程序时遇到的问题是 Xamarin.SDWebImage 包已经用于类似的图像功能。添加和引用这两个 NuGet 包时,链接器会显示很多“重复符号”错误。我发现这些错误与WebP有关,这似乎是两个包使用的绑定(来自不同的来源)导致冲突。
所以一个普遍的问题是,当两个不同的本地库定义相同的符号时,我该怎么办?
此处描述了此特定错误消息:https ://docs.microsoft.com/en-us/xamarin/ios/troubleshooting/mtouch-errors#mt5212-native-linking-failed-duplicate-symbol-我相信我是面对“两个不同的本地库碰巧定义了相同的符号。” 但是该页面根本没有提到如何处理该特定原因。
我尝试添加我认为会有所帮助的 mtouch 参数,例如--registrar:static
and-gcc_flags -dead_strip
我还尝试[assembly: LinkWith (..., SmartLink = true)]
在 AssemblyInfo.cs(或 .csproj 文件)中添加语句。这些都没有帮助。
不幸的是,我不允许共享我的源代码,但只需创建一个全新的 Xamarin.iOS 项目并引入这两个包,然后通过 AppDelegate 中的一些简单方法调用调用它们,就可以很容易地重新创建它.cs (只是为了确保在链接过程中两者都没有被完全剥离),例如:
new FFImageLoading.ImageService();
new SDWebImage.FLAnimatedImageView();
我希望项目能够构建,但项目没有构建,而不是显示很多错误,例如:
Native linking failed, duplicate symbol: '_WebPAllocateDecBuffer'. Duplicate symbol in: /.../liblibwebp.a(buffer_dec.o) (Location related to previous error) Duplicate symbol in: /.../WebP.a(libwebpdspdecode_neon_la-alpha_processing_neon.o) (Location related to previous error)
那么这些错误背后的原因可能是什么?是不是“两个不同的本机库定义了相同的符号”。我怀疑还是别的什么?我能做些什么呢?
有问题的两个包:
- https://github.com/luberda-molinet/FFImageLoading
- https://github.com/xamarin/XamarinComponents/tree/master/iOS/SDWebImage
更多信息:
- Xamarin.iOS 版本:13.16.0.13(Visual Studio 社区)
- Xcode 11.4
谢谢,拉斐尔