我根据XE4 ( Firemonkey + iOS Static Library) , Pascal conversion from Objective C Class?创建了一个delphi项目和Objective C动态库,但是要在OS X上运行。
但是dylib不能从delphi项目加载,用以下方法检查加载错误:
handle := dlopen('/<path>/libtest2.dylib', RTLD_LAZY);
if (handle=0) then
begin
p := dlerror();
SetString(s, p, StrLen(p));
ShowMessage('failed to load lib: ' + s)
end
现在我得到的错误是
failed to load lib: dlopen(/<path>/libtest2.dylib, 1): no suitable image found. Did find:
/<path>/libtest2.dylib: mach-o, but wrong architecture
有些谷歌搜索,我发现我应该用嘴唇检查架构,并且当我应该对dylib运行时得到架构x86_64,但是当我针对delphi项目运行时我得到了
lipo -info /<path>/Project4.app
fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't map input file: /<path>/Project4.app (Invalid argument)
不确定这是否是我问题的根源,但是没有想法 - 任何建议?也许我应该在OS X中加载动态库?
(Delphi XE6 update 1 OSX 10.10)
更新:实际的delphi二进制文件包含在app文件中,并且挖掘它是i386,这就是问题所在。现在必须弄清楚如何生成i386 dylib。
更新2:好吧,因为Delphi生成32位二进制文件,而目标c dylib是64位,它不能是32位。那么Delphi如何与OS X框架接口呢?有一种方法,有人知道怎么做吗?
更新3:使32位dylib关闭ARC,即设置&#39; Objective-C自动参考计数&#39;在构建设置中没有,我们就离开了。希望64位支持将出现在Delphi的下一个版本中 - 升级的原因。
TIA