來源自 這裡
Question:
The problem I faced has been solved here: Loading shared library in open-mpi/ mpi-run
I know not how, setting LD_LIBRARY_PATH or specifying -x LD_LIBRARY_PATH fixes the problem, when my installation itself specifies the necessary -L arguments. My installation is in ~/mpi/. I have also included my compile-link configs.
When I compiled with mpic++ <file> and ran with mpiexec a.out I got a (shared library) linker error:
The error has been fixed by setting LD_LIBRARY_PATH. The question is how and why? What am i missing? Why is LD_LIBRARY_PATH required when my installation looks just fine.
Answer:
libdl, libm, librt, libnsl and libutil are all essential system-wide libraries and they come as part of the very basic OS installation. libmpi and libmpi_cxx are part of the Open MPI installation and in your case are located in a non-standard location that must be explicitly included in the linker search path LD_LIBRARY_PATH.
It is possible to modify the configuration of the Open MPI compiler wrappers and make them pass the -rpath option to the linker. -rpath takes a library path and appends its to a list, stored inside the executable file, which tells the runtime link editor (a.k.a. the dynamic linker) where to search for libraries before it consults theLD_LIBRARY_PATH variable. For example, in your case the following option would suffice:
This would embed the path to the Open MPI libraries inside the executable and it would not matter if that path is part of
LD_LIBRARY_PATH at run time or not.
Supplement:
* GCC Options for Linking
Question:
The problem I faced has been solved here: Loading shared library in open-mpi/ mpi-run
I know not how, setting LD_LIBRARY_PATH or specifying -x LD_LIBRARY_PATH fixes the problem, when my installation itself specifies the necessary -L arguments. My installation is in ~/mpi/. I have also included my compile-link configs.
When I compiled with mpic++ <file> and ran with mpiexec a.out I got a (shared library) linker error:
The error has been fixed by setting LD_LIBRARY_PATH. The question is how and why? What am i missing? Why is LD_LIBRARY_PATH required when my installation looks just fine.
Answer:
libdl, libm, librt, libnsl and libutil are all essential system-wide libraries and they come as part of the very basic OS installation. libmpi and libmpi_cxx are part of the Open MPI installation and in your case are located in a non-standard location that must be explicitly included in the linker search path LD_LIBRARY_PATH.
It is possible to modify the configuration of the Open MPI compiler wrappers and make them pass the -rpath option to the linker. -rpath takes a library path and appends its to a list, stored inside the executable file, which tells the runtime link editor (a.k.a. the dynamic linker) where to search for libraries before it consults theLD_LIBRARY_PATH variable. For example, in your case the following option would suffice:
- -Wl,-rpath,/home/vigneshwaren/mpi/lib
Supplement:
* GCC Options for Linking
沒有留言:
張貼留言