Xamarin.iOS 本机链接错误 MTOUCH MT5210 未定义符号 std::string

2023-12-15

我的 Xamarion.iOS 绑定项目具有指向所有必需的本机视频 SDK 库和本机操作系统框架的链接。我已经使用 Frameworks 属性设置了所需的框架。其他设置包括 SmartLink=true、ForceLoad=true、IsCxx=true、LinkerFlags="-lc++"。它可以内置到 C# DLL 中。在iOS项目中,会引用并使用DLL。但是存在本机链接错误。

MTOUCH: Error MT5210: Native linking failed, undefined symbol: std::string::_Rep::_M_destroy(std::allocator<char> const&). Please verify that all the necessary frameworks have been referenced and native libraries are properly linked in. 

构建日志中的详细信息:

> Undefined symbols for architecture arm64:
>       "std::string::_Rep::_M_destroy(std::allocator<char> const&)", referenced from:
>           HPR_UTF82A(char const*) in libHCCore.a(HPR_Utils.o)
>           HPR_A2UTF8(char const*) in libHCCore.a(HPR_Utils.o)
>       "std::string::_Rep::_S_empty_rep_storage", referenced from:
>           HPR_UTF82A(char const*) in libHCCore.a(HPR_Utils.o)
>           HPR_A2UTF8(char const*) in libHCCore.a(HPR_Utils.o)
>       "std::string::assign(char const*, unsigned long)", referenced from:
>           HPR_UTF82A(char const*) in libHCCore.a(HPR_Utils.o)
>           HPR_A2UTF8(char const*) in libHCCore.a(HPR_Utils.o)
>       "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char>
> const&)", referenced from:
>           HPR_A2UTF8(char const*) in libHCCore.a(HPR_Utils.o)
>       "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)", referenced
> from:
>           HPR_A2UTF8(char const*) in libHCCore.a(HPR_Utils.o)
>     ld: symbol(s) not found for architecture arm64
>     clang : error : linker command failed with exit code 1 (use -v to see invocation)

换行错误:

MTOUCH: Warning MT5215: References to 'System' might require additional -framework=XXX or -lXXX instructions to the native linker (MT5215)

Error MT5201: Native linking failed. Please review the build log and the user flags provided to gcc: -ObjC (MT5201)

MTOUCH: Error MT5202: Native linking failed. Please review the build log. (MT5202)

clang: Error: linker command failed with exit code 1 (use -v to see invocation)

请阐明。谢谢。

Xcode 中没有此类本机链接错误。构建设置:

enter image description here


托管链接并且本机链接可能会删除代码。全部链接可能会删除更多代码。因此,需要解决问题,而不是使用“全部链接”使问题消失。使用Link All时,需要使用Preserve属性来保存代码。

我添加了所有本机引用,并正确设置了链接选项。此外,我还设置了链接器标志以正确包含所有必需的操作系统平台框架。添加对本机动态框架的引用后,错误消失了。然后我得到的不是未定义的符号,而是重复的符号。我必须删除对本机库的引用。

虽然iOS项目是在引用动态框架后链接和构建的,但存在运行时问题。我们的 SDK 提供商确认我们不得使用他们的动态框架。动态框架是为其他客户提供的,用于 Xcode 中的不同目标 SimpleDemo_Dy。它们是旧版本的SDK。我们应该只使用静态库。

我重新检查了 Xcode 构建日志。 Xcode 中的目标 SimpleDemo 没有使用动态框架。问题是为什么 Xcode 项目在不使用任何动态框架的情况下构建,但 Visual Studio for Mac 构建失败并出现本机链接错误?

我创建了一个仅使用静态库的示例 iOS 应用程序。它构建并运行正常。我已与您分享了示例 iOS 应用程序。链接是https://drive.google.com/file/d/10QXkaZE7lURN6IF96NIrTGY2lmn88ctF/view?usp=sharing.

我无法在我们的产品应用程序中使用相同的绑定项目设置实现相同的目标。我什至尝试从示例应用程序中交换绑定项目。这没有帮助。我还比较了项目选项 UI 和 WinMerge 中的 iOS 项目设置。我仍然找不到问题所在。我已经多次尝试清理和重建。我尝试去一个新的工作空间。它仍然存在未定义的符号错误。

我认为问题是本机库 libHCCore.a 是用 libstdc++ 编译的,这导致了错误未定义的符号 std::string,而其余的都是 libc++。

将链接器标志 -lstdc++ 添加到本机引用没有帮助。如何在 iOS 项目中使用额外的 Mtouch 参数或在绑定项目中使用额外的 btouch 参数来解决问题?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xamarin.iOS 本机链接错误 MTOUCH MT5210 未定义符号 std::string 的相关文章

  • Xamarin.iOS 目标 iOS 6 SDK

    我们已升级到 XCode 5 和 Xamarin iOS 7 x 但有一个应用程序尚未准备好支持 iOS 7 有没有办法以 iOS 6 0 SDK 为目标 并编译应用程序 使其具有旧的 iOS 6 键盘等 我们尝试更改 iOS Build
  • 框架时代的封装

    在我以前的 C 工作中 我们总是非常小心地封装成员变量 并且仅在绝对必要时才将它们作为属性公开 我们有非常具体的构造函数来确保您在使用对象之前完全构造了该对象 如今 使用 ORM 框架 依赖注入 序列化等 似乎您最好只依赖默认构造函数并在属
  • 是否可以将路由参数传递给 Laravel 中的控制器构造函数?

    是否可以将路由参数 或路由段 注入到控制器构造函数中 您找到一些代码来澄清我的问题 class TestController protected param public function construct paramFromRoute
  • 使用spring自动装配时如何传递构造函数参数?

    我们的项目使用 spring DI IoC 所以我使用自动装配来注入 beans 程序在实例化期间需要将参数传递给对象 并且参数是在运行时 而不是在编译时 知道的 如何在使用自动装配时实现这一点 示例代码如下 界面 IMessage pac
  • 如何在 Xamarin Forms 中获取视频的长度

    如何使用 Xamarin Forms 获取视频的长度 我已使用以下链接从视频中获取缩略图 但我需要能够获取视频长度 https forums xamarin com discussion 119450 create thumbnail fr
  • Swift 运行时库与 Swift 标准库

    In this 关于如何使用 CocoaPods 的教程 https www raywenderlich com 97014 use cocoapods with swift我无法理解以下段落 与 Objective C 不同 标准 Swi
  • Ninject Providers -> 在提供程序中获取另一个依赖项

    我想知道这里的最佳实践是什么 我需要为我的多租户应用程序构建一个 DbContext 因此我创建了一个如下所示的依赖项提供程序 public class TenantContextFactoryProvider Provider
  • 构建错误重复符号 arclite.o

    我正在尝试构建我的 Xcode 项目 但收到下面显示的错误 请帮我解决这个错误 提前谢谢您 duplicate symbol non lazy classes in Applications Xcode app Contents Devel
  • 如何在asp.net core 2.2中注册IFileProvider进行依赖注入?

    我有以下类 以便能够从引用项目的资源中提供文件 public class ConfigureOptions IPostConfigureOptions
  • 如何在xamarin中隐藏导航工具栏图标?

    我想在 xamarin 中隐藏导航栏按钮 我怎样才能使用绑定来做到这一点 工具栏项目没有 可见 财产 以下是我的xaml代码 请帮我解决这个问题 我建议构建一个可绑定的 ToolBoxItem 这样您就可以通过视图模型属性控制可见性 一个实
  • 如何使用 MonoTouch c# 以编程方式获取联系人?

    如何获取 iPhone 中的联系人 我需要从 iPhone 联系人中获取所有属性 如何使用MonoTouch以编程方式实现 ABAddressBook iPhoneAddressBook new ABAddressBook ABPerson
  • Spring注入绑定到Instance

    有没有一种方法可以使用类似于 Google Guice 的 Spring DI 将注入的对象绑定到特定实例 bind MyClass class toInstance myclassobject 如果构造函数或成员变量被注释为 Autowi
  • UIRotationGesture 之后重置视图

    我在 UIImageView 上有一个 UIRotationRecognizer 旋转视图后 我想提交更改 以便下次旋转图像时它会自然旋转 目前 使用下面的代码 释放触摸并尝试再次旋转后 原点似乎已关闭 Export RotationSel
  • 如何在 C++ 中强制包含静态库中的静态对象 (MSVC 11)

    我试图在 C 文件中初始化一个静态对象 该文件试图在其构造函数中将类自动注册到工厂 就像任何标准自动注册问题一样 问题是 它被编译为静态库 并且在链接到可执行文件时被优化掉 应该有一个非常简单的解决方案 但令人惊讶的是 看起来并不那么简单
  • 升级到 Mac OS X 10.9 / Xcode 5.0.1 后出现 C++ 链接错误

    升级到 Mac OS X 10 9 Xcode 5 0 1 后 创建共享库 dylib 的命令行失败 并出现多个未定义的符号 clang dynamiclib install name test dylib o o test dylib U
  • 将模板化 C++ 类拆分为 .hpp/.cpp 文件——可能吗?

    我在尝试编译 C 模板类时遇到错误 该类分为 hpp and cpp file g c o main o main cpp g c o stack o stack cpp g o main main o stack o main o In
  • IoC容器中创建的对象可以称为Singleton吗?如果不是——为什么?

    IOC容器中创建的对象可以称为Singleton吗 如果可以 为什么 如果不可以 为什么 谁能用简单的语言详细解释一下 IOC 容器如何准确管理对象 你可以说 Spring 单例不是单例 Singleton有其有意义的作用域 spring
  • 如何知道我安装的是哪个版本的 monotouch?

    如何知道我安装的是哪个版本的 monotouch 有多种方法可以获取版本号 从终端您可以执行以下操作 Developer MonoTouch usr bin mtouch version mtouch 5 3 5 1340204820 or
  • asp.net MVC - 如何通过不同的存储库类共享 SqlConnection 的同一实例

    我正在使用 MVC5 和普通 ADO NET 创建一个新项目 只是作为学习练习 我需要创建一个存储库 用于注册一个模型 其中包含几个也需要同时创建的相关对象以及这些对象反过来可能需要插入其他对象 我能想到的最简单的解决方案是拥有一个庞大的方
  • Visual Studio - 查找哪些模块导致 C1905(处理器不兼容)

    我正在尝试使用 Visual Studio 2005 进行 x64 版本的项目 当前失败 并出现链接器错误 C1905 前端和后端不兼容 必须针对相同的处理器 根据我收集的信息 这本质上是说我的 x64 构建正在尝试与 x86 模块链接 不

随机推荐