【问题标题】:What's the syntax for LIBS environment variable?LIBS 环境变量的语法是什么?
【发布时间】:2021-12-18 09:25:57
【问题描述】:

mpicxx 有一个 LIBS 环境变量。但手册页只说

调用链接器时添加的库

我想知道这个变量的详细语法,例如,我们应该在目录之前加上-L,我们应该只写目录名还是lib文件名,我们应该用空格或逗号或其他东西分隔多个库,等等。?我试图用谷歌搜索语法,但找不到有关它的信息。所以我在这里问。感谢您的帮助。

【问题讨论】:

  • 你问的是什么版本的mpi?它们并不完全相同,并且该变量不是 mpi 的标准功能
  • @Nate T:对不起,我听不懂你的意思。具体来说,我无法将您的评论与我的问题联系起来。
  • @talonmies:MPI 版本:4.0.3,mpicxx 版本:g++ (Ubuntu 10.2.0-13ubuntu1) 10.2.0
  • 我的意思是 OpenMPI、mpich、某些供应商特定的版本?
  • @talonmies:deb 文件是libopenmpi-dev_4.0.3-6ubuntu2_amd64.deb。这就是我可以调查的关于我使用的 mpi 的供应商的全部内容。

标签: linux mpi command-line-arguments ld linker-flags


【解决方案1】:

我想知道这个变量的详细语法

MPI 编译器包装器识别的LIBS 变量并不特定于这些程序,并且它没有自己的语法。该变量只是扩展(不加引号)以形成链接命令行的一部分,位于适合指定要包含在链接中的库的参数中的位置。通用语法是shell命令语法的一个子集,内容的具体意义由链接器控制。

请注意,在重要的程度上,“链接器”可能不是直接的ld,而是(对于mpicxx)一个C++ 编译器前端,例如g++。以与将程序与非 MPI C++ 编译器链接时相同的形式指定库和库搜索路径条目。

我们应该在目录前加上-L

如果您想将目录添加到库搜索路径,那么可以,您可以使用-L 选项。

我们应该只写 [...] lib 文件名

最常规的做法是使用-l 选项,因此要链接libfoo.so,您将使用-lfoo。或者,您还应该能够指定库文件的相对或绝对路径(不带-l),在这种情况下,搜索路径无关紧要。通过特定路径指定库通常仅用于作为同一项目的一部分构建的库。

我们是否应该用空格或逗号或其他方式分隔多个库

您正在指定扩展为 shell 命令一部分的选项和参数。多个参数必须用空格分隔。

等等

如前所述,所有细节都来自变量的使用方式。某些可用功能(但通常不是上述任何功能)可能因系统而异,具体取决于底层链接器识别的选项。

【讨论】:

  • 我已经尝试了我能想象到的一切,但链接器就是找不到 mpi 库。我试过-L-lLIBRARY_PATHLDFLAGS。它们都不起作用。
  • 很抱歉,@zzzhhh,但我无法详细说明您的机器目前是如何配置的。但是,我希望 MPI 库本身是您不需要特别要求的一件事。我希望mpicxx知道在哪里可以找到它们,并且可能会自动将它们包含在链接中。也许你在这里提出了一个 XY 问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
相关资源
最近更新 更多