MPI和D语言:链接器选项

10
我正在尝试使用D编程语言与MPI进行交互。D完全支持C ABI,并且可以链接和调用任何C代码。我已经完成了一些基本工作,将MPI头文件翻译为D语言。然后,我将从维基百科复制的测试程序翻译成了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的命令。但是,我也意识到我之前的头文件翻译是错误的。下一个问题是:如何正确地翻译头文件?

你在翻译时使用了 extern(C) 吗? - ratchet freak
2
你尝试过运行类似 strace -f mpicc test.c 这样的命令,查找链接器选项吗?我猜它会调用 ld 或一些其他子进程。 - gmfawcett
1个回答

2

mpicc是不同脚本甚至程序的通用名称。其中一些选项如-echo-show-compile-info-link-info-showme,或者环境选项可以显示实际调用了什么。

尝试使用以下命令检查它实际上是什么:

 file -k `which mpicc`

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

 strings `which mpicc`

有时候字符串可以提取选项名称和/或环境变量,它们控制脚本的工作。
此外,大多数mpicc检查CC env变量以获取编译器的名称。您可以编写一个脚本或程序,只需打印其参数并将CC env设置为该程序即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接