Как мне создать статическое приложение на C ++ openmpi? - PullRequest
0 голосов
/ 31 мая 2019

Я пытаюсь создать статический исполняемый файл MPI для машин Linux.Исходный код написан на C ++.Когда я компилирую последовательные версии кода с gcc -static и запускаю ldd в исполняемом файле, он не показывает библиотек.

Однако, когда я пытаюсь сделать это с MPI, есть определенные библиотеки, которые не связаны статически.Я собрал свой openmpi на моей машине с помощью приведенных ниже команд оболочки.Я также вижу, что те же самые библиотеки, которые статически не связаны с исполняемым файлом, не статически связываются со сборкой openmpi.В конце сборки openmpi я получаю

/home/bevan/Downloads/openmpi-4.0.1/opal/.libs/libopen-pal.a(dl_dlopen_module.o): In function `dlopen_open':
dl_dlopen_module.c:(.text+0x413): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/bevan/Downloads/openmpi-4.0.1/orte/.libs/libopen-rte.a(plm_rsh_module.o): In function `setup_launch':
plm_rsh_module.c:(.text+0xca2): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/bevan/Downloads/openmpi-4.0.1/opal/.libs/libopen-pal.a(if.o): In function `opal_ifaddrtoname':
if.c:(.text+0x1e4): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/bevan/Downloads/openmpi-4.0.1/orte/.libs/libopen-rte.a(ras_slurm_module.o): In function `init':
ras_slurm_module.c:(.text+0x6e4): warning: Using 'gethostbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/home/bevan/Downloads/openmpi-4.0.1/opal/.libs/libopen-pal.a(evutil.o): In function `evutil_unparse_protoname':
/home/bevan/Downloads/openmpi-4.0.1/opal/mca/event/libevent2022/libevent/evutil.c:758: warning: Using 'getprotobynumber' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

Вид цепочки команд, которую я считаю нужным использовать:

tar -xvf openmpi-4.0.1
cd ./openmpi-4.0.1
./configure --prefix="$HOME/.openmpi" --without-memory-manager CXX=g++ CC=gcc LDFLAGS=--static --disable-shared --enable-static
make
sudo make install
export PATH="$PATH:$HOME/.openmpi/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$HOME/.openmpi/lib/"
cd application/directory/build
cmake ..
make application

Я хотел бы иметь возможность запустить ldd application после компиляции с MPI и не имеет динамически связанных библиотек, связанных с приложением.

...