ソース コードから gentoo に openmpi-1.4.5 をインストールしています。GLIBC_2.11 との下位互換性があり、1 つの debian gnu/linux (squeeze) コンピューティング ノードを使用して NFS (クラスター HPC) で実行できます。独立した書店を持つ 2 つのシステムを持つことに似ていますが、どちらも高性能ネットワークでファイルを実行できます。どちらのオペレーティング システムでも MPI 経由でファイルを実行できるという考え方です。これらは、構成および作成するために実行した手順です。
configure:
.././configure --prefix=/usr/local/ompi-compat --build=x86_64-pc-linux-gnu --with-openib CC=x86_64-pc-linux-gnu-gcc -include /usr/local/include/gcc-preinclude.h
make:
make LDFLAGS="-Wl,-rpath -Wl,/spoa/usr/lib64 -Wl,-rpath -Wl,/usr/local/ompi-compat/lib" 2>&1 | tee make02.log
その後、作成段階が中断されます。
...
..
libtool: compile: x86_64-pc-linux-gnu-gcc -include /usr/local/include/gcc-preinclude.h -DHAVE_CONFIG_H -I. -I../../.././opal/asm -I../../opal/include -I../../orte/include -I../../ompi/include -I../../opal/mca/paffinity/linux/plpa/src/libplpa -I../../../. -I../.. -I../../.././opal/include -I../../.././orte/include -I../../.././ompi/include -O3 -DNDEBUG -finline-functions -fno-strict-aliasing -MT atomic-asm.lo -MD -MP -MF .deps/atomic-asm.Tpo -c atomic-asm.S -fPIC -DPIC -o .libs/atomic-asm.o
/usr/local/include/gcc-preinclude.h: アセンブラ メッセージ:
/usr/local/include/gcc-preinclude.h:1: Error: invalid character '(' in mnemonic
make[2]: [atomic-asm.lo] Error 1
make[2]: Leaving directory `/usr/local/src/openmpi-1.4.5/build/opal/asm'
make[1]: [all-recursive] Error 1
make[1]: Leaving directory `/usr/local/src/openmpi-1.4.5/build/opal'
make: [all-recursive] Error 1
モジュール asm に関する問題があります。これは、ヘッダー /usr/local/include/gcc-preinclude.h から memcpy@2_2_5 シンボルを除外するために 1 つの include c 適応を使用しているためです。
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
この状況をフォルダー add --tag=CC に修正し、x86_64-pc-linux-gnu-gcc コンパイラーから「-include /usr/local/include/gcc-preinclude.h」をカットしました。
/bin/sh ../../libtool --tag=CC --mode=compile x86_64-pc-linux-gnu-gcc -DHAVE_CONFIG_H -I. -I../../.././opal/asm -I../../opal/include -I../../orte/include -I../../ompi/include -I../../opal/mca/paffinity/linux/plpa/src/libplpa -I../../../. -I../.. -I../../.././opal/include -I../../.././orte/include -I../../.././ompi/include -O3 -DNDEBUG -finline-functions -fno-strict-aliasing -MT atomic-asm.lo -MD -MP -MF $depbase.Tpo -c -o atomic-asm.lo atomic-asm.S &&mv -f $depbase.Tpo $depbase.Plo
この行を opal/asm/ フォルダーにコンパイルするのは素晴らしいことです!
メインのビルド フォルダーに戻り、コンパイルを続行します。
make LDFLAGS="-Wl,-rpath -Wl,/spoa/usr/lib64 -Wl,-rpath -Wl,/usr/local/ompi-compat/lib" 2>&1 | tee make02.log
コンパイルが有効になってから数分後。
しかし、実行のためにいくつかの実行可能ファイルをテストすると、「セグメンテーション違反」として表示されます。
cd opal/tools/wrappers/.libs
.libs # ./opal_wrapper
Segmentation fault
したがって、すべての実行可能ファイルで...
Now, veryfing the Shared Library path linking to ELF File:
ldd opal_wrapper
linux-vdso.so.1 => (0x00007fff3ffff000)
libopen-pal.so.0 => /usr/local/ompi-compat/lib/libopen-pal.so.0 (0x00002b8ea8239000)
libdl.so.2 => /spoa/usr/lib64/libdl.so.2 (0x00002b8ea8493000)
libnsl.so.1 => /spoa/usr/lib64/libnsl.so.1 (0x00002b8ea8697000)
libutil.so.1 => /spoa/usr/lib64/libutil.so.1 (0x00002b8ea88af000)
libm.so.6 => /lib64/libm.so.6 (0x00002b8ea8ad5000)
libpthread.so.0 => /spoa/usr/lib64/libpthread.so.0 (0x00002b8ea8d56000)
libc.so.6 => /spoa/usr/lib64/libc.so.6 (0x00002b8ea8f72000)
/lib64/ld-linux-x86-64.so.2 (0x00002b8ea8017000)
-rpath でリンクされた共有オブジェクト ファイルがあります。私は、debian に同梱されているメインのオリジナルの共有オブジェクトを /spoa/usr/lib64 フォルダーに「スクイーズ」してリンクして使用しています。しかし、失敗は元のgentooダイナミックリンカー/lib64/ld-linux-x86_64.so.2へのリンクに起因すると思います
There is my debian "squeeze" main toolchain shared objects:
ls /spoa/usr/lib64/
ld-2.11.3.so libdl.so.2 libnsl-2.11.3.so libstdc++.so.6.0.13 libz.so.1.2.3.4
ld-linux-x86-64.so.2 libgcc_s.so libnsl.so.1 libutil-2.11.3.so
libc-2.11.3.so libgcc_s.so.1 libpthread-2.11.3.so libutil.so.1
libc.so.6 libgfortran.so.3.0.0 libpthread.so.0 libz.so
libdl-2.11.3.so libm.so libstdc++.so.6 libz.so.1
この実行可能ファイルのリンカーを手動で変更すると、(NFS 経由で) gentoo および debian に実行され、最終的に実行されます:
/bin/sh ../../../libtool --tag=CC --mode=link x86_64-pc-linux-gnu-gcc -include /usr/local/include/gcc-preinclude.h -O3 -DNDEBUG -finline-functions -fno-strict-aliasing -pthread -fvisibility=hidden -L/spoa/usr/lib64 -Wl,-rpath -Wl,/spoa/usr/lib64 -o opal_wrapper opal_wrapper.o ../../../opal/libopen-pal.la -lnsl -lutil -lm -Wl,-rpath -Wl,/usr/local/ompi-compat/lib -Wl,-dynamic-linker /spoa/usr/lib64/ld-linux-x86-64.so.2
結果:
libtool: link: x86_64-pc-linux-gnu-gcc -include /usr/local/include/gcc-preinclude.h -O3 -DNDEBUG -finline-functions -fno-strict-aliasing -pthread -fvisibility=hidden -Wl,-rpath - Wl,/spoa/usr/lib64 -o .libs/opal_wrapper opal_wrapper.o -Wl,-rpath -Wl,/usr/local/ompi- compat/lib -Wl,-dynamic-linker /spoa/usr/lib64/ld-linux-x86-64.so.2 -L/spoa/usr/lib64 ../../../opal/.libs/libopen-pal.so -ldl -lnsl -lutil -lm -pthread
および ldd は、適切なリンカーを正しく表示します。
wrappers ldd .libs/opal_wrapper
linux-vdso.so.1 => (0x00007fffc75a7000)
libopen-pal.so.0 => /usr/local/ompi-compat/lib/libopen-pal.so.0 (0x00002b396dd38000)
libdl.so.2 => /spoa/usr/lib64/libdl.so.2 (0x00002b396df91000)
libnsl.so.1 => /spoa/usr/lib64/libnsl.so.1 (0x00002b396e196000)
libutil.so.1 => /spoa/usr/lib64/libutil.so.1 (0x00002b396e3ae000)
libm.so.6 => /lib64/libm.so.6 (0x00002b396e5d3000)
libpthread.so.0 => /spoa/usr/lib64/libpthread.so.0 (0x00002b396e855000)
libc.so.6 => /spoa/usr/lib64/libc.so.6 (0x00002b396ea71000)
/spoa/usr/lib64/ld-linux-x86-64.so.2 (0x00002b396db18000)
私の質問は、-Wl、-dynamic-linker を使用して、適切な共有オブジェクトのファイルにリンクされた正しい ELF を生成できるかどうかです。
実行中: ./opal_wrapper
構成ファイル /usr/local/ompi-compat/share/openmpi/opal_wrapper-wrapper-data.txt を開けません データ ファイル opal_wrapper の解析エラー: 見つかりません
私のホスト情報の一部:
hostname = master
uname -m = x86_64
uname -r = 3.4.5-gentoo
uname -s = Linux
uname -v = #1 SMP Mon Jul 23 21:35:06 UTC 2012