【问题标题】:MPI and D: Linker OptionsMPI 和 D:链接器选项
【发布时间】:2011-10-20 03:45:32
【问题描述】:

我正在尝试将 MPI 与 D 编程语言一起使用。 D完全支持C ABI,可以链接和调用任何C代码。我已经完成了显而易见的工作并将 MPI 标头翻译为 D。然后我将 a test program from Wikipedia 翻译为 D。我使用以下命令对其进行了编译:

dmd test.d -L-lmpistubs

当我只运行 ./test 并打印时它就可以工作:

0: We have 1 processors

但是,当我使用mpiexec -n 8 test 运行时,它什么也没打印。我的理解是 MPI 可执行文件需要一堆奇怪的链接选项,这就是为什么存在像 mpicc 这样的工具来自动化该过程的原因。但是,如果我尝试在 D 中使用 MPI,这对我没有帮助。我认为这是因为我没有使用正确的链接器选项。谁能告诉我mpicc 做了什么以及如何让 DMD 做同样的事情?

编辑:我使用mpicc -showme 找到了答案。这显示了 mpicc 转发到 gcc 的命令。但是,我也意识到我做的头文件翻译错误。下一题:How do to it right.

【问题讨论】:

  • 你翻译的时候有没有用extern(C)?
  • 您是否尝试过运行strace -f mpicc test.c 或类似的东西来寻找链接器选项?我假设它正在调用ld 或作为子进程的东西。

标签: linker parallel-processing d mpi mpiexec


【解决方案1】:

mpicc 是不同脚本甚至程序的通用名称。 其中一些具有-echo-show-compile-info-link-info-showme 等选项或环境选项来显示实际调用的内容。

尝试检查它实际上是什么

 file -k `which mpicc`

如果是脚本,可以用sh、bash、perl、python编写。您可以轻松查看它并找到正确的选项。 如果是程序,尝试运行

 strings `which mpicc`

有时strings 可以提取控制脚本工作的选项名称和/或环境变量。

此外,大多数 mpicc 检查 CC 环境变量以获取编译器的名称。您可以编写一个脚本或程序来打印其参数并将 CC env 设置为该程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多