4.9.2. 安装选项
以下是可与configure一起使用的通用安装命令行选项:
--prefix=DIR: 将Open MPI安装到名为DIR的基础目录中。因此,Open MPI的可执行文件将存放在DIR/bin中,头文件存放在DIR/include中,库文件存放在DIR/lib中等。注意
更多关于安装前缀的信息,请参阅installation location部分。
--disable-shared: 默认情况下,Open MPI和OpenSHMEM会构建共享库,所有组件都包含在这些共享库中。此开关会禁用此默认行为;它通常仅在与--enable-static一起使用时才有意义。具体来说,此选项不意味着--enable-static;启用静态库和禁用共享库是两个独立的选项。提示
See this section 获取关于此CLI选项的打包建议。
--enable-static: 将MPI和OpenSHMEM构建为静态库,并静态链接所有组件。请注意,此选项不意味着--disable-shared;启用静态库和禁用共享库是两个独立的选项。请务必阅读下方关于
--without-memory-manager的描述;它可能会对--enable-static产生一些影响。提示
参见本节获取关于此命令行选项的打包建议。
--disable-wrapper-runpath/--disable-wrapper-rpath: 默认情况下,包装器编译器(如mpicc)在支持的系统上链接用户可执行文件时,会显式添加"runpath"和"rpath"链接器标志。这意味着创建的可执行文件将在应用程序本身中包含对OpenMPI库位置的引用。这样用户就不需要设置LD_LIBRARY_PATH来查找OpenMPI的库,当这些库安装在运行时链接器默认不搜索的位置时,这个功能会很有帮助。使用
--disable-wrapper-r*path选项将阻止包装器显式添加这两个链接器标志中的一个或全部。注意
默认情况下,包装器编译器优先采用"runpath"行为而非"rpath"行为。
使用
--disable-wrapper-runpath会改变这一默认行为:包装器将不再添加显式的"runpath"链接器标志。不过,如果平台支持的话,"rpath"标志可能仍会被添加。同时使用
--disable-wrapper-runpath和--disable-wrapper-rpath将阻止包装器 显式添加"runpath"和"rpath"链接器 标志。
警告
即使包装器编译器没有显式添加"runpath"或"rpath"链接器标志,本地编译器、链接器和/或操作系统在链接时可能会隐式启用"runpath"或"rpath"行为。
重要
命令行选项
--disable-wrapper-runpath和--disable-wrapper-rpath仅影响 包装编译器在构建MPI/SHMEM应用程序时使用的标志。这些选项不会影响Open MPI或OpenSHMEM的构建方式(包括包装编译器本身的构建)。有关“rpath”和“runpath”如何影响Open MPI自身构建和链接的详细信息,请参阅链接器“rpath”和“runpath”功能部分。
当启用“runpath”或“rpath”行为中的任意一种时,应用程序会将OpenMPI库的文件系统路径位置硬编码到OpenMPI/OpenSHMEM应用中。"runpath"与"rpath"行为之间最显著的区别在于:
运行路径
运行时链接器首先在
LD_LIBRARY_PATH环境变量指定的路径中搜索相关的Open MPI/OpenSHMEM库。如果在那里没有找到,运行时链接器会回退检查相关Open MPI/OpenSHMEM库的硬编码位置。
rpath
运行时链接器首先检查相关Open MPI/OpenSHMEM库的硬编码位置。
如果在那里没有找到,运行时链接器会回退到在
LD_LIBRARY_PATH环境变量中搜索相关的Open MPI/OpenSHMEM库路径。
警告
“runpath”与“rpath”之间还存在其他细微差异,这些内容超出了本文档的范围。如需了解更多信息,建议查阅其他资料。
例如,可以在一个名为"Linux上构建和使用共享库//共享库:动态链接器"的Linux课程幻灯片中找到一套不错的解释说明。
例如,假设您安装了Open MPI vA.B.0版本,并基于此版本编译/链接了您的MPI/OpenSHMEM应用程序。之后,您又将Open MPI vA.B.1安装到不同的路径前缀下(例如
/opt/openmpi/A.B.1对比/opt/openmpi/A.B.0),同时保留了旧版本的安装。在运行路径情况下,您可以设置
LD_LIBRARY_PATH环境变量指向A.B.1安装目录,这样您的MPI应用程序就会使用这些库,因为运行时会优先搜索LD_LIBRARY_PATH中的路径。在rpath情况下,由于运行时链接器会优先搜索硬编码在MPI应用程序中的
/opt/openmpi/A.B.0路径,您的应用程序将使用A.B.0安装中的库(无论LD_LIBRARY_PATH环境变量的值如何)。请注意,在两种情况下,如果您移除原始的A.B.0版本安装,并将
LD_LIBRARY_PATH设置为指向A.B.1版本的安装目录,您的应用程序将会使用A.B.1版本的库文件。如上所述,可以通过
--disable-wrapper-rpath禁用runpath/rpath行为。注意
您还可以自定义包装编译器使用的编译器/链接器标志来构建Open MPI/OpenSHMEM应用程序。
--enable-dlopen: 允许Open MPI在运行时将组件作为独立的动态共享对象(DSOs)加载。此选项默认启用。该选项的反向操作,
--disable-dlopen,会导致以下情况:Open MPI 在运行时不会尝试打开任何动态共享对象(DSO)。
configure 的行为如同设置了
--enable-mca-static参数。configure 将忽略
--enable-mca-dso参数。
有关更多信息,请参阅
--enable-mca-static/--enable-mca-dso的描述。注意
此选项不会改变Open MPI库(例如
libmpi)的构建方式。您可以通过--enable|disable-static和--enable|disable-shared参数来更改Open MPI构建静态库还是动态库。
--enable-mca-dso[=LIST]和--enable-mca-static[=LIST]这两个选项,连同--enable-mca-no-build,共同控制着Open MPI框架和组件的构建方式。提示
See this section 获取关于这些命令行选项的打包建议。
--enable-mca-dso选项用于指定哪些框架和/或组件应构建为动态共享对象(DSO)。具体来说,DSO会作为"插件"构建在Open MPI核心库之外,并在运行时由Open MPI加载。--enable-mca-static选项用于指定哪些框架和/或组件作为Open MPI核心库的一部分构建(即它们不会构建为动态共享对象DSO,因此在运行时无需单独发现和加载)。这两个选项可以通过以下两种方式之一使用:
--enable-mca-OPTION(无参数值)--enable-mca-OPTION=LIST
--enable-mca-OPTION=no或--disable-mca-OPTION都是合法的选项,但不会影响下文描述的选择逻辑。只有肯定性选项才会改变选择过程。如果未指定
LIST(例如使用不带LIST的--enable-mca-dso),或者如果LIST是特殊值yes,则将选择所有组件。如果指定了LIST,则它是一个以逗号分隔的Open MPI框架和/或框架+组件元组列表。例如:btl指定整个BTL框架btl-tcp仅指定BTL框架中的TCP组件mtl,btl-tcp指定了整个MTL框架以及BTL框架中的TCP组件
Open MPI的
configure脚本在评估每个组件时会使用这两个选项的值,通过按顺序评估以下条件来决定应如何构建:如果某个组件的构建行为已通过这两个选项指定,
configure将使用该行为。否则,如果组件位于某个框架中,且该框架的构建行为已通过这两个选项指定,
configure将使用该行为。否则,
configure将使用全局默认的构建行为。
在选择的每个层级中,如果组件被指定同时构建为静态和动态共享对象(DSO)组件,静态选项将优先。
注意
从Open MPI v5.0.x版本开始,
configure的全局默认设置是将所有组件构建为静态库(即作为Open MPI核心库的一部分,而非动态共享对象)。在Open MPI v5.0.0之前,全局默认行为是将大多数组件构建为动态共享对象。重要
如果指定了
--disable-dlopen选项,那么 Open MPI将无法在运行时搜索DSO, 并且--enable-mca-dso选项的值 将被静默忽略。一些示例:
默认将所有组件构建为静态库(即作为Open MPI核心库的一部分,不使用动态共享对象DSO):
shell$ ./configure
将所有组件构建为动态共享对象(DSO):
shell$ ./configure --enable-mca-dso
将所有组件构建为静态库,除了TCP BTL,它将构建为动态共享对象(DSO):
shell$ ./configure --enable-mca-dso=btl-tcp
将所有组件构建为静态库,除了所有BTL组件,它们将被构建为动态共享对象(DSO):
shell$ ./configure --enable-mca-dso=btl
将所有组件构建为静态库,除了所有MTL组件和TCP BTL组件,它们将被构建为动态共享对象(DSO):
shell$ ./configure --enable-mca-dso=mtl,btl-tcp
将所有BTL构建为静态库,除了TCP BTL,因为
选项比选项更具体:shell$ ./configure --enable-mca-dso=btl --enable-mca-static=btl-tcp
将TCP BTL构建为静态,因为同级别的静态选项总是优先:
shell$ ./configure --enable-mca-dso=btl-tcp --enable-mca-static=btl-tcp
--enable-mca-no-build=LIST: 以逗号分隔的<框架>-<组件>对列表,这些组件将不会被构建。例如,--enable-mca-no-build=threads-qthreads,pml-monitoring将禁用构建qthreads线程组件和monitoringPML组件。注意
此选项通常仅对原本会被构建的组件有效。例如,如果您使用的机器不支持Libfabric,则无需指定:
shell$ ./configure --enable-mca-no-build=cm-ofi
因为
configure脚本会自动检测到您不支持Libfabric,并自动跳过ofiCM组件。--with-show-load-errors=VALUE: 设置mca_base_component_show_load_errorsMCA变量的默认值。MCA变量mca_base_component_show_load_errors仍然可以通过常规的MCA变量设置机制在运行时被覆盖;此配置选项仅设置默认值。该选项的
no/none值适用于Open MPI打包人员,他们倾向于在其软件包中启用对多种不同类型网络和系统的支持。例如,考虑一个打包人员在其Open MPI软件包中同时包含对FOO和BAR网络的支持,两者都需要支持库(libFOO.so和libBAR.so)。如果最终用户只有BAR硬件,他们的系统上可能只有libBAR.so可用——而没有libFOO.so。默认禁用加载错误将防止用户看到关于FOO组件因libFOO.so不可用而加载失败的潜在混淆警告。相反,该选项的
yes/all值适用于系统管理员,他们倾向于构建针对其特定环境的Open MPI,并且包含很少(如果有的话)不需要的组件。在这种情况下,他们可能希望警告用户FOO网络组件加载失败(例如,如果libFOO.so错误地不可用),因为Open MPI可能会默默地故障转移到较慢的MPI通信网络路径。注意
有关
mca_base_component_show_load_errorsMCA变量的详细信息,请参阅common MCA parameters部分。--with-platform=FILE: 从FILE文件中加载构建配置选项。命令行中未包含在FILE中的选项也会被使用。命令行和FILE中重复的选项会被FILE中的内容覆盖。--with-libmpi-name=STRING: 将libmpi.*和libmpi_FOO.*(其中FOO是安装在lib目录中的Fortran支持库之一)替换为libSTRING.*和libSTRING_FOO.*。这个选项是为Open MPI的第三方打包者提供的便利机制,他们可能出于自身目的需要重命名这些库。不建议Open MPI的普通用户使用此选项。