问题标签 [xamarin-linker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
799 浏览

xamarin - Xamarin.Android 链接器问题

我有一个以前在发布模式下工作的旧 Xamarin Androd 项目。现在大约 8-9 个月后发生了一些变化,所以我做了它们并检查了在调试模式下工作正常的应用程序。但是当我尝试在发布模式下运行它时,应用程序崩溃了。以下是崩溃发生时来自 android 监视器的错误日志。

经过一番研究,我发现链接器存在一些问题。当前选择仅链接 SDK 程序集。这会使应用程序崩溃。如果我选择无链接,则应用程序工作正常。

我已经尝试过https://docs.microsoft.com/en-us/xamarin/android/deploy-test/linkerhttps://docs.microsoft.com/en-us/xamarin/cross-platform/部署测试/链接器。那些没有用。

不过,如果有人能在这方面提供帮助,那将是充分的帮助。谢谢。

0 投票
2 回答
372 浏览

xamarin - Xamarin Android 构建只是在启用链接器时挂起

我有一个 Xamarin.Android 项目在尝试在发布配置中构建解决方案时挂起。我已将其缩小到链接器的问题 - 如果链接器关闭,一切正常。

我已经完成了更详细的构建,甚至msbuild从命令行使用(这表明这不是 IDE 问题),结果是一样的。直到它挂起的构建输出显示:

它真的挂了,就像线程死锁什么的。没有办法取消构建,您只需要退出 IDE(同样,终端中的 ^C 也不执行任何操作)。

这似乎只会影响我拥有的这个 Xamarin 项目(许多其他具有类似配置的项目都可以正常构建)。在这个阶段,我真的只是希望找到一种方法来了解发生了什么问题。

任何提示将不胜感激。

0 投票
3 回答
5576 浏览

xamarin.forms - Xamarin iOS build error - Native linking failed (Link Framework SDKs Only)

Not able to run Xamarin iOS project after Visual studio update.

Because updated IDE requires the latest Xcode (iOS 13.4 SDK shipped with Xcode 11.4)

Environment Details

  • OS Version : macOS Mojave, OS X 10.14.6
  • IDE : Visual Studio Community 2019 for Mac Version 8.5.1 (build 42)
  • Xamarin.iOS Version: 13.16.0.11 (Visual Studio Community)
  • Xamarin.Mac Version: 6.16.0.11 (Visual Studio Community)
  • Xcode Version 13.2

What I tried.

Instead of updating the Xcode, I simply changed the Linker Behaviour to Link Framework SDKs Only.

No luck, I got the following errors.

Reference.

Is there any other option to resolve the issue without update the Xcode and macOS?

Any help will be really appreciated.

Thank you

0 投票
1 回答
179 浏览

xamarin - Xamarin:修复链接器错误(使用 FFImageLoading 和 SDWebImage)

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

谢谢,拉斐尔

0 投票
1 回答
268 浏览

xamarin - 当链接器设置为“全部链接”时,会发生 Xamarin 错误。无法使用依赖服务

现在,由于 UIWebView 已弃用,我必须将链接器设置为“全部链接”才能提交到 App Store。这样做时,我必须添加[Preserve(AllMembers = true)]到我的 DataStore 以使它们以这种方式工作,但后来我遇到了这个问题。

以下行将返回 null:

在研究了解决方案之后,似乎最好的答案是将以下行添加到 AppDelegate 中:

一旦我这样做了,我就开始收到这个异常:

DependencyService: System.MissingMethodException: Default constructor not found for [Interface] https://forums.xamarin.com/discussion/71072/dependencyservice-system-missingmethodexception-default-constructor-not-found-for-interface

我只想找到一个可行的解决方案,让一切都可以使用设置为“链接全部”的链接器。提前致谢。

文本仪表:

TextMeter 实现:

0 投票
1 回答
587 浏览

ios - Xamarin Forms iOS 错误 MT5202:本机链接失败

对于我的 Xamarin Forms iOS 项目,我总是将链接器行为设置为“仅链接框架 SDK”,它在过去有效,但突然我不能再使用它了。尝试编译时出现以下错误。

有人知道这是什么意思吗?当我将链接器行为设置为“不链接”时,项目构建没有问题。如果此信息有帮助,我没有使用 Firebase。

0 投票
0 回答
144 浏览

ios - 添加项目时出现 Xamarin IOS 链接器错误

所以我刚刚在我的 Xamarin 解决方案中添加了一个实用程序项目,现在我遇到了链接器错误。这没有意义,因为我将链接器行为设置为不链接。有谁知道是否有办法解决这个问题?

在此处输入图像描述

\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(885,3):警告 MT5215:对“libcups”的引用可能需要额外的 -framework=XXX 或-lXXX 对本机链接器的说明 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(885,3): warning MT5215: References to 'gdiplus' 可能需要对本机链接器 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets 附加 -framework=XXX 或 -lXXX 指令(885,3):错误 MT5202:本机链接失败。请查看构建日志。可能需要对本机链接器 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(885, 3):警告 MT5215:对“gdiplus”的引用可能需要对本机链接器 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS 附加 -framework=XXX 或 -lXXX 指令\Xamarin.iOS.Common.targets(885,3):错误 MT5202:本机链接失败。请查看构建日志。可能需要对本机链接器 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(885, 3):警告 MT5215:对“gdiplus”的引用可能需要对本机链接器 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS 附加 -framework=XXX 或 -lXXX 指令\Xamarin.iOS.Common.targets(885,3):错误 MT5202:本机链接失败。请查看构建日志。\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(885,3):错误 MT5202:本机链接失败。请查看构建日志。\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Xamarin\iOS\Xamarin.iOS.Common.targets(885,3):错误 MT5202:本机链接失败。请查看构建日志。

0 投票
1 回答
93 浏览

xamarin.forms - Xamarin.Android 链接器错误在 Android 项目上使用 Visual.Basic nuget

我有一个用 VB.net .net 3.5 编写的旧库,使用这个库作为 Xamarin.Android 项目上的 dll 或项目引用,与链接器“无”一起工作。如果我使用链接器,问题就开始了。当我将链接器设置为“仅 SDK 程序集”时,我收到以下错误消息。

错误 Java.Interop.Tools.Diagnostics.XamarinAndroidException:错误 XA2006:无法解析对“System.Void Microsoft.VisualBasic.MyGroupCollectionAttribute::.ctor(System.String,System.String,System.String,System.String)”的引用(在程序集 'VBLibraryProject,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null' 中定义),范围为 'Microsoft.VisualBasic,Version=8.0.0.0,Culture=neutral,PublicKeyToken='。当作用域与定义的程序集不同时,通常意味着该类型被转发。---> Mono.Cecil.ResolutionException: 无法在 Mono.Linker.Steps.MarkStep 解析 System.Void Microsoft.VisualBasic.MyGroupCollectionAttribute::.ctor(System.String,System.String,System.String,System.String) Mono.Linker.Steps.MarkStep 处的 .HandleUnresolvedMethod(MethodReference 参考)。
在 Mono.Linker.Steps.MarkStep.MarkCustomAttributes(ICustomAttributeProvider provider) 在 Mono.Linker.Steps.MarkStep.MarkEntireType(TypeDefinition type) 在 Mono.Linker.Steps.MarkStep.MarkEntireType(TypeDefinition type) 在 Mono.Linker.Steps.MarkStep .MarkEntireAssembly(AssemblyDefinition 程序集) 在 Mono.Linker.Steps.MarkStep.InitializeAssembly(AssemblyDefinition 程序集) 在 Mono.Linker.Steps.MarkStep.Initialize() 在 Mono.Linker.Steps.MarkStep.Process(LinkContext context) 在 MonoDroid.Tuner .MonoDroidMarkStep.Process(LinkContext context) 在 Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep 步骤)
在 Mono.Linker.Pipeline.Process(LinkContext context) 在 MonoDroid.Tuner.Linker.Process(LinkerOptions options, ILogger logger, LinkContext& context) 在 Xamarin.Android.Tasks.LinkAssemblies.Execute(DirectoryAssemblyResolver res)

我已经为下面的那些库添加了 AndroidLinkSkip

尽管如此,它仍然因同样的错误而失败?项目使用最新的 XF 4.8 版本和 Android.Support 库和目标版本 android 9.0 最低版本 8.0

编辑:我尝试使用以下类型的 linker.xml,LinkDescription但没有帮助。

0 投票
0 回答
238 浏览

firebase - Xamarin Android Linker - 删除 Firebase 消息传递类

我有一个带有相应 Xamarin Android 项目的 Xamarin Forms 应用程序。我使用 Azure 通知中心来管理对应用程序的推送,并使用 FCM 来管理 Android 部分。该应用程序在上述设置中已经运行了一段时间。

当链接器设置为时,应用程序一切正常,"None"但我的应用程序的最终下载大小很大。将 Linker 属性设置为SDK Assemblies Only不会导致任何构建错误,但会导致推送通知中断。当通知被推送到设备时,应用程序崩溃(前台或后台)。

我使用 Firebase Crashlytics 记录的错误是java.lang.InstantiationException: java.lang.Class<com.google.firebase.iid.FirebaseInstanceIdReceiver> cannot be instantiated. 我了解链接器可能删除了“未使用”的类,其中之一可能是必需的 Firebase 类。

我已经尝试将命名空间、类名、程序集名称等的各种修改添加到Skip Linking assemblies选项中,但似乎都没有帮助解决这个问题

在此处输入图像描述

我也在尝试Enable MultiDex使用此应用程序,但如果没有链接器,它会在初始加载时使应用程序崩溃。启用链接器后,Multi-Dex 似乎也能正常工作。

0 投票
0 回答
353 浏览

xamarin - 由于链接器问题,Xamarin iOS 绑定库 (Swift) 构建错误

我有 Xamarin.iOS 项目,我正在尝试在其中使用 Vivalnk sdk(一个 Swift 5 框架)。

我正在尝试浏览本指南: https ://docs.microsoft.com/en-us/xamarin/ios/platform/binding-swift/walkthrough

请注意,我忽略了构建本机库的步骤,因为 Swift sdk 提供了内置的 Objective-c 标头。

所以,我使用了一个客观的Sharpie来生成 ApiDefinitions.cs 和 StructsAndEnums.cs 文件。

一旦使用此命令:(目标 c)

并且曾经使用过这个:(Swift)

最后,我使用了以下命令的结果:

然后,我创建了 iOS 绑定库,将这些文件替换为旧文件,并根据微软的文档设置构建操作。

然后,我将 Vivalnk 框架添加到 Native References,将 smartlink 设置为 true,并将 load 强制设置为 false。成功构建绑定库后,我将此 iOS 绑定库引用到我的 Xamarin.iOS 项目并使用它,但是当我构建 Xamarin.iOS 项目时,出现 249 错误,如下所示:

我在互联网上搜索了很多,也尝试了这些:

  • 将链接器行为设置为仅链接框架 SDK。
  • 在两个项目中安装 Xamarin.Swift。
  • 添加这个:

到 iOS 绑定库中本机引用的 Linker Flags。

添加这个:

在可执行项目的 iOS 构建选项中的其他 mtouch 参数中。

我检查了 Xcode 的位置,它就在那里。但他们都没有为我工作。我在 Visual Studio for Mac 和 windows 中都进行了测试,没有任何改变。

我在这里创建了一个示例项目,其中包含重现构建错误所需的一切: https ://github.com/SomayeEbrahimi/Vivalnk.iOS

环境:

更新

如果我将“Foundation”添加到原生引用的框架中,这些错误将消失,我们将出现以下错误