Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

From: Jeff Squyres (jsquyres_at_[hidden])
Date: 2005-09-12 17:31:48


Maybe I'm dense -- I thought you couldn't use --shared when linking to
a static library...?

If you want to build OMPI as a shared library, then ditch the
--enable-static --disable-shared from your configure line (building
OMPI as shared is the default, which is how I build 95% of the time).

On Sep 12, 2005, at 5:47 PM, Nathan DeBardeleben wrote:

> I've been having this problem for a week or so and I've been asking
> other people to weigh in if they know what I'm doing wrong. I've
> gotten
> no where on this so I figure I'll finally drop it out on the list.
> First, here's the important info:
> The machine:
>
>> [sparkplug]~ > cat /etc/issue
>>
>> Welcome to SuSE Linux 9.1 (x86-64) - Kernel \r (\l).
>>
>>
>> [sparkplug]~ > uname -a
>> Linux sparkplug 2.6.10 #4 SMP Wed Jan 26 11:50:00 MST 2005 x86_64
>> x86_64 x86_64 GNU/Linux
>
> My versions of libtool, autoconf, automake:
>
>> [sparkplug]~ > libtool --version
>> ltmain.sh (GNU libtool) 1.5.20 (1.1220.2.287 2005/08/31 18:54:15)
>>
>> Copyright (C) 2005 Free Software Foundation, Inc.
>> This is free software; see the source for copying conditions. There
>> is NO
>> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
>> PURPOSE.
>> [sparkplug]~ > autoconf --version
>> autoconf (GNU Autoconf) 2.59
>> Written by David J. MacKenzie and Akim Demaille.
>>
>> Copyright (C) 2003 Free Software Foundation, Inc.
>> This is free software; see the source for copying conditions. There
>> is NO
>> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
>> PURPOSE.
>> [sparkplug]~ > automake --version
>> automake (GNU automake) 1.8.5
>> Written by Tom Tromey <tromey_at_[hidden]>.
>>
>> Copyright 2004 Free Software Foundation, Inc.
>> This is free software; see the source for copying conditions. There
>> is NO
>> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
>> PURPOSE.
>> [sparkplug]~ >
>
> My ompi version: 7322 - but this has been going on for a few days like
> I
> said and I've been updating a lot, with no progress.
>
> Configured using:
>
>> $ ./configure --enable-static --disable-shared --without-threads
>> --prefix=/home/ndebard/local/ompi --with-devel-headers
>> --enable-mca-no-build=ptl-gm
>
> Simple C file which I will compile into a shared library:
>
>> int test_compile(int x) {
>> int rc;
>>
>> rc = orte_init(true);
>> printf("rc = %d\n", rc);
>>
>> return x + 1;
>> }
>
> Above file is named 'testlib.c'
>
> OK, so let's build this:
>
>> [sparkplug]~/ompi-test > mpicc -c testlib.c
>> [sparkplug]~/ompi-test > mpicc -shared -o libtestlib.so testlib.o
>> /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/../../../../x86_64-suse-
>> linux/bin/ld:
>> testlib.o: relocation R_X86_64_32 can not be used when making a shared
>> object; recompile with -fPIC
>> testlib.o: could not read symbols: Bad value
>> collect2: ld returned 1 exit status
>
> OK so relocation problems. Maybe I'll follow the directions and -fPIC
> my file myself:
>
>> [sparkplug]~/ompi-test > mpicc -c testlib.c -fPIC
>> [sparkplug]~/ompi-test > mpicc -shared -o libtestlib.so testlib.o
>> /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/../../../../x86_64-suse-
>> linux/bin/ld:
>> /home/ndebard/local/ompi/lib/liborte.a(orte_init.o): relocation
>> R_X86_64_32 can not be used when making a shared object; recompile
>> with -fPIC
>> /home/ndebard/local/ompi/lib/liborte.a: could not read symbols: Bad
>> value
>> collect2: ld returned 1 exit status
>
> OK so I read this as there's a relocation problem in 'liborte.a'. I
> un-arred liborte.a and checked some of the files with 'file' and it
> says
> 64bit. I havn't yet written a script to check every file in here, but
> here's orte_init.o:
>
>> [sparkplug]~/<1>tmp > file orte_init.o
>> orte_init.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV),
>> not stripped
>
> So that at least says it's 64bit.
> And to confirm, my mpicc's 64bit too:
>
>> [sparkplug]~/<1>tmp > which mpicc
>> /home/ndebard/local/ompi/bin/mpicc
>> [sparkplug]~/<1>tmp > file /home/ndebard/local/ompi/bin/mpicc
>> /home/ndebard/local/ompi/bin/mpicc: ELF 64-bit LSB executable, AMD
>> x86-64, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked
>> (uses shared libs), not stripped
>
> Someone suggested I take out the 'disabled-shared' from the configure
> line, so I did. The result was the same.
>
> So the result is that I can not build a shared library on a 64bit linux
> machine that uses orte calls.
> So then I tried taking out the orte calls and instead use MPI calls.
> Sure, this function makes no sense but here it is now:
>
>> #include "orte_config.h"
>> #include <mpi.h>
>>
>> int test_compile(int x) {
>> MPI_Comm_rank(MPI_COMM_WORLD, &x);
>>
>> return x + 1;
>> }
>
> And now, when I try and make a shared object I get relocation errors:
>
>> /usr/lib64/gcc-lib/x86_64-suse-linux/3.3.3/../../../../x86_64-suse-
>> linux/bin/ld:
>> /home/ndebard/local/ompi/lib/libmpi.a(comm_init.o): relocation
>> R_X86_64_32 can not be used when making a shared object; recompile
>> with -fPIC
>> /home/ndebard/local/ompi/lib/libmpi.a: could not read symbols: Bad
>> value
>
> So... could perhaps the build be messed up and not be really using
> 64bit
> code?
> Am I the only one seeing this? It's a trivial test for those of you
> with access to a 64bit machine if you wouldn't mind testing for me.
>
> Help would be greatly appreciated.
>
> --
> -- Nathan
> Correspondence
> ---------------------------------------------------------------------
> Nathan DeBardeleben, Ph.D.
> Los Alamos National Laboratory
> Parallel Tools Team
> High Performance Computing Environments
> phone: 505-667-3428
> email: ndebard_at_[hidden]
> ---------------------------------------------------------------------
>
> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel
>

-- 
{+} Jeff Squyres
{+} The Open MPI Project
{+} http://www.open-mpi.org/