无法通过 mpicc 将附加标志传递给 gcc
Unable to pass additional flags to gcc through mpicc
我有一个使用 OpenMPI 库的 C 程序。我还使用了 libm 中的函数,并在我的程序中包含了 math.h
。使用mpicc
编译时,像这样
mpicc -lm program.c -o program.out
编译成功,但linking失败,ld
无法link 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
的包装器,其工作是将编译和 linking 标志传递给 gcc
。为什么不将 -lm
传递给 gcc
?我如何让它将额外的标志传递给 gcc
?我无法在手册页中找到任何内容。
我将 --showme:compiler
和 --showme:linker
与 mpicc
一起使用,并将这些标志与 -lm
一起传递给 gcc
,它生成最终的可执行文件就好了.
事实证明,传递给 mpicc
的命令行参数的顺序很重要。为了使 mpicc
将附加标志传递给 gcc
,将它们放在源文件
之前
mpicc -lm program.c -o program.out
放置在源文件之后的标志将被视为包装器的标志,而不是“内核”的标志(在本例中 gcc
)。
我有一个使用 OpenMPI 库的 C 程序。我还使用了 libm 中的函数,并在我的程序中包含了 math.h
。使用mpicc
编译时,像这样
mpicc -lm program.c -o program.out
编译成功,但linking失败,ld
无法link 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
的包装器,其工作是将编译和 linking 标志传递给 gcc
。为什么不将 -lm
传递给 gcc
?我如何让它将额外的标志传递给 gcc
?我无法在手册页中找到任何内容。
我将 --showme:compiler
和 --showme:linker
与 mpicc
一起使用,并将这些标志与 -lm
一起传递给 gcc
,它生成最终的可执行文件就好了.
事实证明,传递给 mpicc
的命令行参数的顺序很重要。为了使 mpicc
将附加标志传递给 gcc
,将它们放在源文件
mpicc -lm program.c -o program.out
放置在源文件之后的标志将被视为包装器的标志,而不是“内核”的标志(在本例中 gcc
)。