我正在编写一个使用 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 项目传递的额外单声道触摸参数描述如下:
-cxx -v -gcc_flags "-L${ProjectDir} -lstdc++ -lresolv -liconv -lxml2 -lz -ObjC -force_load ${ProjectDir}/Libs/libcrypto.a" -cxx -v -gcc_flags "-L${ProjectDir } -lstdc++ -lresolv -liconv -lxml2 -lz -ObjC -force_load ${ProjectDir}/Libs/libssl.a" -cxx -v -gcc_flags "-lstdc++ -lresolv -liconv -lxml2 -lz -ObjC -L${ProjectDir } -framework Security -framework CoreVideo -framework CoreMedia -framework AVFoundation -framework CFNetwork -framework Accelerate -framework AudioToolbox -framework CoreAudio -framework Foundation -framework CoreGraphics -framework UIKit -force_load ${ProjectDir}/Libs/libsipwrapper.a -dead_strip -all_load "
SDK 由三个库组成:libcrypto.a、libssl.a 和 libsipwrapper.a。
在互联网上的许多文章/帖子之后,建议添加添加标准库,例如 -lstdc++、lz 和 ObjC,但这似乎不适用于我的情况。
我还尝试创建一个包含三个库和包装器代码的绑定项目,添加到链接文件的内容看起来像这样:
[程序集:LinkWith ("libsipwrapper.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 = "-lstdc++ -lresolv -liconv -lxml2 -lz -ObjC")]
问题没有解决,我继续遇到所描述的链接错误。