xamarin-ios绑定上的本地链接错误
Native linking error on xamarin ios binding
我正在编写一个使用p/Invoke绑定到iOS SDK的包装器,因为Sharpie无法为此SDK生成可编译代码。
当使用引用的包装器项目编译iOS应用程序时,我遇到了许多链接问题,例如以下问题:
MTOUCH:错误MT5210:本机链接失败,未定义符号:std::locale::classic()。请验证所有必要的框架都已被引用,并且本地库已正确链接。MTOUCH:错误MT5210:本机链接失败,未定义符号:std::__throw_bad_cast()。请验证所有必要的框架都已被引用,并且本地库已正确链接。MTOUCH:错误MT5210:本机链接失败,未定义符号:std::invalid_argument::invalid_argument(std::string const&)。请验证所有必要的框架都已被引用,并且本地库已正确链接。(请在这个完整的日志文件中找到完整的日志。)
iOS项目传递的额外单声道触摸参数如下所述:
-ccxx-v-gcc_flags"-L${ProjectDir}-lsdc++-lresolv-liconv-lxml2-lz-OjC-force_load${ProjectDir}/Libs/libcrypto.a"cxx-v-gcc_flags"-L${ProjectDir}-lsdc++-lesolv-liconv-lxml2-lz-ObjC-force_load${Project Dir}/Libs/libssl.a"-cx_v-gcc_flags"-lsdc++-lesolv-liconv-L xml2-lz-OjC-L${项目目录}-framework Security-framework CoreVideo-framework Core Media-framework AVFoundation-framework CFNetwork-framework Accelerate-framework AudioToolbox-framework CoreAudio-framework Foundation-framework CoreGraphics-framework UIKit-force_load${ProjectDir}/Libs/libsipwrapper.a-dad_strip-all_load">
SDK由三个库组成:libcrypto.a、libssl.a和libsipwrapper.a.
根据互联网上的许多文章/帖子,建议添加标准库,如-lsdc++、lz和ObjC,但这似乎对我的情况不起作用。
我还尝试创建了一个绑定项目,其中包括三个库和包装器代码,添加到带有文件的链接中的内容似乎是这样的:
[程序集:LinkWith("libsipwapper.a",LinkTarget.ArmV7|LinkTarget.ArmV7s|LinkTarget_Arm64,Frameworks="CoreVideo CoreMedia AVFoundation CFNetwork Accelerate AudioToolbox CoreAudio Foundation CoreGraphics UIKit",ForceLoad=false,SmartLink=true,IsCxx=true,LinkerFlags="-lsdc++-lresolv-liconv-lxml2-lz-OjC")]
问题没有得到解决,我仍然存在所描述的链接错误。
经过两天的浪费时间,我终于得到了它,要明确的是,猜测要传递给触摸的参数,正确链接一个仅由您自己构建的库并不明显。为了简化任务,我编译了SDK提供商提供的演示应用程序,并使用Xcode编译演示,并将Xcode发送的参数发送到clang++。这帮助我计算出要发送到单点触控的参数:
--编译器:clang++-cxx-v-gcc_flags"-stdlib=libstdc++-L${ProjectDir}-force_load${ProjectDir}/Libs/libcrypto.a"-ccxx-v-gcc_flags"-stdlb=libstdc++-L${ProjectDir}-force_lead${Project Dir}-Libs/libssl.a"-cxx/v-gcc_fflags"-dad_strip-lresolv-liconv-stdlb=libstdc++-fokjc-arc-fokjc-link运行时-framework CoreMedia-framework CoreVideo-framework AVFoundation-framework CFNetwork-framework AudioToolbox-framework Core Audio-lz-lxml2-framework CoreGraphics-framework UIKit-framework Foundation-L${ProjectDir}-force_load${ProjectDir}/Libs/libsipwrapper.a">
希望这能帮助其他人。
(检查@NyxSway下面描述的两点也非常重要)
在不了解项目更多细节的情况下,您是否检查过:
1) 你检查过你的.a文件是否真的有它抱怨使用terminal->grep命令的符号吗?对于你支持的所有架构:armv7/armv7s/arm64
2) 在您的C#代码中,是否使用[DllImport("__Internal")]而不是您自己的库名称?
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误