包装图像
一般概览
包映像是包含代码和数据的共享库。 就像`。ji’缓存文件,它们是为单个包创建的。 数据部分包含全局数据(全局包变量)和有关包中定义的方法和类型的必要元数据。 代码部分包含基于LLVM缓存Julia编译器最终输出的机器对象。
使用命令行参数'--pkgimages=no',您可以在当前会话中禁用对象缓存。 请注意,正因为如此,缓存文件很可能需要重新创建。 有关Julia默认缓存的最大选项数的信息,请参阅环境变量的描述。 'JULIA_MAX_NUM_PRECOMPILE_FILES'。
尽管乍一看,包图像代表了常见的机器代码库,但实际上它们只是表面上的相似之处。 您将无法从自己的程序构建它们,并且必须从Julia下载它们。 |
布局
由于包映像包含机器代码,因此必须先通过链接器传递它们,然后才能使用它们。 要使用详细信息输出合成包映像,可以分配一个环境变量 JULIA_VERBOSE_LINKING
值为’true'。
此外,我们不能假设链接器安装在用户的工作系统上。 因此,为了避免需要安装额外的组件,Julia已经包含了一个名为LLD的LLVM链接器。 基/链接。jl有一个有限的接口,允许您在所有支持的平台上链接包映像。
一些微妙之处
虽然LLD是一个多平台链接器,但它并不具有所有平台的统一接口。 此外,它假设使用来自clang的编译器或其他编译器驱动程序,因此重新设计了llvm-project/clang/lib/Driver/ToolChains的一些逻辑的实现。 幸运的是,使用lld-flavor,您可以为正确的平台选择LLD。
针对多个微体系结构优化的封装图像
如在 系统映像,软件包映像支持多个版本控制。 在具有统一缓存的异构环境中,可以为对象缓存的多个版本控制设置环境变量`JULIA_CPU_TARGET=generic'。