构建可执行文件但出现共享库

构建可执行文件但出现共享库

我是新手,不熟悉 Linux 操作系统。我目前使用的操作系统是 Ubuntu 19.10。

我试图建立一个 SPPARKS(一个软件https://spparks.sandia.gov/index.html) 可以通过“make mpi”来执行。这个过程没有错误,但是生成的是一个 spk_mpi 的“共享库”文件,而不是一个“可执行”文件。

我将非常感激您的帮助。非常感谢。

答案1

这实际上与前面的问题中讨论的问题相同:

解决方案基本上就像提到的那样

您特定情况所面临的挑战是如何通过 MPI 编译器包装器传递适当的编译器/链接器选项。

在我的 18.04 系统上,OpenMPI 版本指示为

$ mpicc --showme:version
mpicc: Open MPI 2.1.1 (Language: C)

并明确选择 gcc/g++ 版本 5,我能够使用以下命令行获得传统的非 PIE 可执行文件(\为便于阅读,用行连续符分隔):

OMPI_CC=gcc-5 OMPI_CXX=g++-5 \
OMPI_CFLAGS=-fno-pic OMPI_CXXFLAGS=-fno-pic OMPI_LDFLAGS=-no-pie \
make mpi

使用以下命令确认file

$ file spk_mpi 
spk_mpi: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=284d76d1ca642cca833b31dfa028a7910e935600, not stripped

如果您正在使用其他 MPI 实现,那么您将需要弄清楚如何传递适当的标志。

注意:您可能需要make clean-all先运行以删除之前没有该-fno-pic标志编译的任何对象。

相关内容