微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法通过 mpicc 将其他标志传递给 gcc

如何解决无法通过 mpicc 将其他标志传递给 gcc

我有一个使用 OpenMPI 库的 C 程序。我还使用了 libm 中的函数,并在我的程序中包含了 math.h。使用 mpicc 编译时,像这样
mpicc -lm program.c -o program.out
编译成功,但是链接失败,出现ld无法链接libm,出现以下三行错误
/usr/bin/ld: /tmp/cct0O5Yv.o: undefined reference to symbol 'log10@@GLIBC_2.2.5'
/usr/bin/ld: /lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

据我所知,mpicc 只是 gcc 的包装器,其工作是将编译和链接标志传递给 gcc。为什么不将 -lm 传递给 gcc?我如何让它向 gcc 传递额外的标志?我无法在手册页中找到任何内容

我将 --showme:compiler--showme:linkermpicc 一起使用,并将这些标志与 gcc 一起传递给 -lm,它生成的最终可执行文件就好了。

解决方法

事实证明,传递给 mpicc 的命令行参数的顺序很重要。为了使 mpiccgcc 传递额外的标志,请将它们放在源文件之前

mpicc -lm program.c -o program.out

放置在源文件之后的标志将被视为包装器的标志,而不是“内核”(在本例中为 gcc)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。