在我的OSX机器上,在Lib目录的丛林深处,我能够看到此
-r-xr-xr-x 1 user users 45700 Feb 01 1:47 LibXSLT.bundle*
1)这些.bundle文件是什么?
2)谁创造了它们?CPAN模块?
3)如果是这样,我们可以通过一些Makefile伪影控制它的生成?
- 这些
.bundle
文件是什么?
在这种情况下,*.bundle
文件是Mach-O通用二进制文件。
file
可用于检查包括架构的文件类型。
file …/Perl/…/XML/LibXSLT/LibXSLT.bundle
# /LibXSLT.bundle: Mach-O universal binary with 2 architectures:
# [x86_64:Mach-O 64-bit bundle x86_64]
# [arm64e:Mach-O 64-bit bundle arm64e]
- 谁创造了它们?CPAN模块?
lipo
是将一个或多个架构特定可执行文件组合到 mach-o通用二进制中的工具。(通常,尽管Perl可能需要扩展名,但.bundle
文件扩展名是可选的。)
which -a lipo
# /usr/bin/lipo
man lipo
# NAME
# lipo - create or operate on universal files
- 如果是这样,那么我们可以通过某些
Makefile
伪像来控制其一代吗?
Apple文章"构建通用Macos二进制"提及如何使用(C/C /Swift)makefile
通过将结果可执行文件与lipo
工具合并来创建通用二进制。
下面的示例显示了一个Makefile,该makefile两次编译单源文件 - 每种架构的一开始。然后,它通过将结果可执行文件与
lipo
工具合并来创建通用二进制。
x86_app: main.c
$(CC) main.c -o x86_app -target x86_64-apple-macos10.12
arm_app: main.c
$(CC) main.c -o arm_app -target arm64-apple-macos11
universal_app: x86_app arm_app
lipo -create -output universal_app x86_app arm_app
从概念上讲,上述方法可以与ExtUtils::MakeMaker
Makefile.PL
。