关于macOS:通过cmake编译Mac通用库时,包括针对i386和x86_64的不同头文件

including different headers for i386 and x86_64 when compiling universal libraries for mac via cmake

我正在Mac上建立通用库。 我的库使用openssl函数并链接到openssl库。 我可以分别为i386和x86_64获得openssl编译的代码,然后创建一个胖库以使其成为i386和x86_64的通用库。

通过设置CMAKE_OSX_ARCHITECTURES=i386;x86_64通过cmake编译我的库,使其在i386和x86_64之间通用
为i386和x86_64生成的openssl标头不同。 如何使cmake为i386和x86_64选择不同的标头?


AFAIK,当前的openssl构建过程不直接支持OS X通用构建。 一种方法是分别编译每个体系结构,然后使用lipo -combine将每个库文件的两个变体组合成一个组合的通用文件。 请参阅man 1 lipo。 这里有一个例子:https://gist.github.com/tmiz/1441111


including different headers for i386 and x86_64 when compiling universal libraries for mac ...

我不相信您可以为通用库或胖库实现它。

在这种情况下,如果要为体系结构使用不同的头,则可能需要跳转到框架,因为框架允许多组头。 但是我认为我没有看到它用于架构独立性。

《框架编程指南简介》在"框架捆绑包剖析"的"其他目录"下讨论了捆绑包的磁盘布局:

1
2
3
4
5
6
7
8
9
Directory     | Description
--------------+---------------------------------------------------------------------------------
Headers       | Contains any public headers you want to make available to external developers.
--------------+---------------------------------------------------------------------------------
Documentation | Contains HTML or PDF files describing the framework interfaces. Typically,
              | documentation directories do not reside at the top level of your framework.
              | Instead, they reside inside your language-specific resource directories.
--------------+---------------------------------------------------------------------------------
Libraries     | Contains any secondary dynamic libraries your framework requires.