1

我正在尝试将一些本机表单页面集成到现有的 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:staticand-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)

那么这些错误背后的原因可能是什么?是不是“两个不同的本机库定义了相同的符号”。我怀疑还是别的什么?我能做些什么呢?

有问题的两个包:

更多信息:

  • Xamarin.iOS 版本:13.16.0.13(Visual Studio 社区)
  • Xcode 11.4

谢谢,拉斐尔

4

1 回答 1

0

正如您在此处看到的,这两个包之间似乎不兼容,开发人员不久前已经在两个 GitHub 存储库中打开了问题,并通知他们该问题,但到目前为止还没有任何解决方案。所以你不能同时在你的应用程序中同时拥有这两者。

您只需要使用两者之一,我会推荐 FFImageLoading。

于 2020-04-24T22:25:17.450 回答