如何在Mac OS X上编译通用库? [英] How to compile universal libraries on Mac OS X?
问题描述
这可能是一个非常愚蠢的问题,但是我刚开始在Mac上开发,并且很难用通用的二进制文件。
我有我在QT Creator中编译的应用程序,根据lipo,它正在生产i386架构输出。据我理解,这意味着它正在生产Mac OS X 32位输出。
应用程序依赖于两个外部库。其中一个库我编译通过调用./config首先,然后make。 ./config说明它是为darwin-i386-cc配置。但是,在运行make之后,在结果上调用lipo,体系结构被报告为x86_64。
同样,我有另一个外部库。那个没有配置脚本,我编译它只是通过调用make。
我如何编译这两个外部库,使它们产生与我应用程序的i386输出兼容的东西?更好的是,我如何编译这两个外部库来生成通用库,所以我可以从32和64位的应用程序生成一个通用的二进制文件?
此外,基于Mac世界的当前状态,是否有任何其他平台,我应该指望创建一个正确的,用户友好的Mac OS X通用二进制?
为了控制目标的架构,我手动进入了并编辑Makefiles。
对于其中一个,我添加到以CFLAGS开头的行的末尾:-arch i386 -arch x86_64 -arch ppc
这产生了一个通用的二进制。
另一方面,当我做同样的事情,编译会错误。我不得不循环通过,一次只放一个拱,然后我生成了所有三个,我调用lipo与他们的-create标志创建一个通用的二进制。
This may be a very silly question, but I'm new to developing on Macs and am having a hard time with the universal binaries.
I've got an application that I'm compiling in QT Creator, which according to lipo is producing i386 architecture outputs. As I understand it, that means it is producing Mac OS X 32 bit outputs.
The application depends on two external libraries. One of these libraries I'm compiling by calling ./config first, and then make. ./config states that it is "Configured for darwin-i386-cc". However, after running make, and calling lipo on the result, the architecture is reported as x86_64.
Similarly, I have another external library. That one has no configure script, and I compile it simply by calling make. The output from this one too is x86_64.
How can I compile these two external libraries so that they produce something compatible with my application's i386 output? Better yet, how can I compile these two external libraries to produce universal libraries so I can produce a universal binary from my application that works on both 32 and 64 bit?
Also, based on the current state of the Mac world, are there any other platforms that I should be expected to target to create a proper, user-friendly Mac OS X universal binary?
Finally got it working.
In order to control the architecture of the target, I manually went in and edited the Makefiles.
For one of them, I added to the end of the line that starts with CFLAGS: -arch i386 -arch x86_64 -arch ppc This produced a universal binary.
For the other, when I did the same thing, the compile would error out. I had to cycle through and only put one arch at a time, and then after I produced all three, I called lipo on them with the -create flag to create a universal binary.
这篇关于如何在Mac OS X上编译通用库?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!