Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] Problem in static linking and usage of openmpi with icc (and gcc)
From: Gus Correa (gus_at_[hidden])
Date: 2011-06-29 16:22:04


Hi Rohan

Have you tried to configure/compile OpenMPI
and compile your program with:

-static-intel (Intel icc/ifort)

-Bstatic_pgi (PGI pgcc/pgf90) ?

Presumably this will link to each *compiler's* static libraries.

You may not need to configure Open MPI with --disable-shared,
if you copy it over to the other server and set the PATH and
LD_LIBRARY_PATH to point to the OpenMPI location.

My two cents.
Gus Correa

Jeff Squyres wrote:
> On Jun 29, 2011, at 11:31 AM, rohan nigam wrote:
>
>> I am trying to statically build open mpi libraries from a server which has intel and pgi compilers installed and copy the resulting binaries to be used on another test server since I do not have intel and pgi compilers on these test servers (only gcc). First of all, please tell me if this is possible.
>
> I know that it is for intel. I don't know if it is for pgi (meaning: I don't have enough experience with pgi to know).
>
>> So far these are the three different options I have tried and ended up getting the respective errors while running the mpicc or mpirun on the test server:
>
> It's not quite clear from your text -- it looks like you have a combination of "not able to build the OMPI tree" and "able to build/install the OMPI tree, but then failed when tryng to use it" errors. Right?
>
>> Option 1: Using LDFLAGS=-Bstatic
>>
>> ./configure CC=icc CXX=icpc F77=ifort FC=ifort LDFLAGS=-Bstatic --without-memory-manager --without-libnuma --enable-static --disable-shared --prefix=/opt/openmpi/openmpi-intel --enable-mpi-f77 --enable-mpi-f90 2>&1 | tee configure-intel.log
>>
>> Error on the test server:
>> ld: attempted static link of dynamic object `/cm/shared/apps/torque/2.4.11/lib/libtorque.so'
>> make[2]: *** [orte-clean] Error 1
>
> This one is pretty clearly a "not able to build the OMPI tree" error, assumedly on the machine with the compilers.
>
> This means that you don't have libtorque.a. When you use -Bstatic (IIRC), you need *all* support libraries to have .a (i.e., static) versions.
>
> Alternatively, you *might* be able to just to --enable-static --disable-shared. This will make Open MPI be fully static, but not necessarily its support libraries. That being said, that might not suit your needs, since the compilers will have some support libraries. See below.
>
>> Option 2: Using LDFLAGS= -static
>
> I'm assuming that you were able to build/install, but then failed when trying to run on the 2nd server.
>
>> Error on the test server:
>> root_at_ubuntu-server2:/opt/openmpi-intel/bin# ./mpicc
>> Cannot open configuration file /opt/openmpi/openmpi-intel/share/openmpi/mpicc-wrapper-data.txt
>
> Does this file exist on your 2nd server? When you copy/move/whatever the OMPI installation to the 2nd server, it is easiest to put it in exactly the same location as you installed it on the 1st server.
>
>> Error parsing data file mpicc: Not found
>> root_at_ubuntu-server2:/opt/openmpi-intel/bin# mpirun
>> mpirun: error while loading shared libraries: libtorque.so.2: cannot open shared object file: No such file or directory
>
> Do you have the torque libraries installed on your compute nodes?
>
> Open MPI uses them for launching / monitoring jobs (i.e., it uses native torque support, which means that you need to have libtorque.so installed on the back-end nodes, or you need to have libtorque.a available when you're building OMPI so that libtorque.so isn't necessary at run-time).
>
>> Option 3: LDFLAGS=-static-intel (same as deprecated i-static option)
>> Error on the test server
>> mpirun: error while loading shared libraries: libtorque.so.2: cannot open shared object file: No such file or directory
>> root_at_ubuntu-server2:/opt/openmpi-intel/bin# ./mpicc
>> Cannot open configuration file /opt/openmpi/openmpi-intel/share/openmpi/mpicc-wrapper-data.txt
>> Error parsing data file mpicc: Not found
>
> This looks like pretty much the same as option 2, but I think this is the option that you want (i.e., make the intel support libraries be static, let everything else be whatever it wants to be).
>
> If you fix the libtorque.so issue that I mentioned in #2, then #3 might be the best option for you.
>
>> How do I exclude torque shared libraries. Will that solve the problem?
>>
>> FYI, both servers (test and the original server) are 64-bit AMD opterons and the openmpi works perfectly fine on the original server on which they were built on.
>>
>> Any comments or suggestions will help.
>>
>> Thanks,
>> Rohan
>> _______________________________________________
>> users mailing list
>> users_at_[hidden]
>> http://www.open-mpi.org/mailman/listinfo.cgi/users
>
>