由于架构不匹配,将静态库从Xcode链接到Lazarus应用程序失败

由于架构不匹配,将静态库从Xcode链接到Lazarus应用程序失败,xcode,linker,archive,lazarus,mismatch,Xcode,Linker,Archive,Lazarus,Mismatch,这里的大量研究和通过谷歌链接进行的深入探索都无济于事 我用OSXcode(5)制作了一个简单的、单函数的静态C库,我正试图将它链接到Lazarus应用程序中,基本上是将Xcode函数从Xcode移植到Lazarus Xcode构建了静态库,我在Lazarus应用程序中找到了正确的链接代码,如下所示: type byteptr = ^byte; const libname = 'libLORaudio.a'; function LORaudioPlay (fd : longint; audio

这里的大量研究和通过谷歌链接进行的深入探索都无济于事

我用OSXcode(5)制作了一个简单的、单函数的静态C库,我正试图将它链接到Lazarus应用程序中,基本上是将Xcode函数从Xcode移植到Lazarus

Xcode构建了静态库,我在Lazarus应用程序中找到了正确的链接代码,如下所示:

type
byteptr = ^byte;

const
libname = 'libLORaudio.a';

function LORaudioPlay (fd : longint; audio : byteptr): Integer;
     cdecl; external libname;

r := LORaudioPlay(e, z);
所有这些编译都很好,但生成失败,并显示以下消息:

Id: symbol(s) not found for architecture i386
Id: Warning: ignoring file libLORaudio.a, file was built for archive which is not the architecture being linked (i386): libLORaudio.a

(and it goes on to say the function is undefined, of course, since it ignored the library that supplies it.)
我的问题可以用两种方法中的任何一种来解决,无论是在网上还是在Xcode或Lazarus中,我都没有找到足够的信息

一个解决方案是让Xcode生成具有Lazarus所期望的体系结构的静态库。我已经尝试过在Xcode中设置构建架构的各种选项,这些选项在这里对类似问题的其他回答中提到过,但似乎我没有正确地进行设置,因为它们都不适合我

另一个解决方案是让Lazarus接受Xcode产生的架构。Laz.y文档在这方面没有帮助


有什么建议我可以试试吗?非常感谢您的考虑。

因此,最终,我用Finder四处搜寻,找到了我分别构建x86_64和i386对象文件以解决问题的地方(见下文)。这是通过将架构的构建设置更改为“i386”来实现的。“x86_64”的后续重建未从早期版本中删除i386对象信息

然后我将i386对象文件复制到包含Lazarus项目的文件夹中(必须使用alt选项拖动方法进行复制,因为复制然后粘贴不起作用)

在那里,我在Terminal中对其运行ar,如:“ar-r-s libname.a name.o”,以从对象构建静态库

Lazarus现在可以根据需要处理库。(当然,这揭示了一些需要处理的其他问题,但是,嘿,进展是有的。)


Xcode已将对象的两个版本都放在一个文件夹中。右键单击project navigator中提到的产品并选择“show in finder”,从Xcode中查找这些产品。您可以为当前拥有的任何体系结构执行此操作;两者都会导致相同的生成文件夹。从那里你的工作方式备份通过包含文件夹,直到你点建设。打开它,然后在包含的文件夹中继续前进,直到对象正常为止。在那里,您可以找到i386和x86_64的文件夹。这些文件夹中的每一个都包含相应的对象文件,如name.o以及其他与产品相关的文件。

我猜您编译的库的架构与Lazarus/FPC的架构不同(如警告文本中提到的i386)。尝试在库的生成模式下设置32位体系结构。@Abelisto肯定是体系结构不匹配。我尝试了多种方法让Xcode接受32位体系结构规范,但它只接受最初的“i386 x86_64”。构建设置是否有后门?不确定,我不熟悉OS X。但您也可以尝试在Lazarus项目选项(“配置和目标”页面)中更改目标操作系统和处理器。您可以下载并安装相应的FPC。据我所知,您需要
fpc-2.6.4.intel-ppc64-macosx.dmg
(检查版本,必须与已安装的fpc相同)。