[mpich-discuss] mpicxx linking problem - related to -Wl, -rpath - g++ works
Sebastian Steiger
steiger at purdue.edu
Wed May 19 20:10:56 CDT 2010
Hello everybody,
I'm encountering a weird linking problem. I'm trying to link against a
library "libnemo.so" which itself has a lot of dependencies. When I use
g++ as a linker, it works:
% g++ -o hello_world.bin hello_world.cpp -L../../lib -lnemo
%
When I use mpicxx, it doesn't:
% mpicxx -o hello_world.bin hello_world.cpp -L../../lib -lnemo
(...)/libqhull++.so: undefined reference to `qh_clear_outputflags()'
(...)/libqhull++.so: undefined reference to `qh_getcentrum(facetT*)'
(etc.)
libqhull++ is a dependency of libnemo. This is the actual linking
command that mpicxx substitutes:
% mpicxx -link_info -o hello_world.bin hello_world.cpp -L../../lib -lnemo
c++ -g -O2 -g -Wall -O2 -Wl,-Bsymbolic-functions -o my_test.bin
my_test.cpp -L../../lib -lnemo -I/usr/include/mpich2 -L/usr/lib
-L/usr/lib -Wl,-rpath -Wl,/usr/lib -lmpichcxx -lmpich -lopa -lpthread -lrt
So mpicxx attaches a couple of flags and some libraries at the end. FYI,
when I use mpicxx -cxx=g++ the g++ linker is invoked but the same
problem remains.
When I take away the "-Wl,-rpath -Wl,/usr/lib" part, it works:
% c++ -g -O2 -g -Wall -O2 -Wl,-Bsymbolic-functions -o hello_world.bin
hello_world.cpp -L../../lib -lnemo -I/usr/include/mpich2 -L/usr/lib
-L/usr/lib -lmpichcxx -lmpich -lopa -lpthread -lrt
%
Also, mpicxx works by itself if I don't link to my library:
% mpicxx -o hello_world.bin hello_world.cpp
%
So it's both connected to mpicxx and my library. Unfortunately this is
just one notch beyond my level of understanding of the linking process.
Does anybody have a clue?
At the bottom you find the libraries against which I link libnemo.so.
Thanks for your help
Sebastian
====================================================================
steiger at ncnlnx07:~/src/app-nemo/NEMO/prototype/tests/test_material_db$
ldd ../../lib/libnemo.so
linux-vdso.so.1 => (0x00007fff1bdfa000)
libdl.so.2 => /lib/libdl.so.2 (0x00007f3362749000)
liblapack.so.3gf => /usr/lib/liblapack.so.3gf (0x00007f3361b68000)
libblas.so.3gf => /usr/lib/libblas.so.3gf (0x00007f33618cd000)
libtensor.so =>
/home/steiger/src/app-nemo/NEMO/libs/tensor3D/libtensor.so
(0x00007f33616b1000)
libNEMat-1.00.so =>
/home/steiger/src/app-nemo/NEMO/libs/../MaterialDB/NEMat/libNEMat-1.00.so (0x00007f336142c000)
libnemo_petsc_double.so =>
/home/steiger/src/app-nemo/NEMO/prototype/src/math/libnemo_petsc_double/libnemo_petsc_double.so
(0x00007f33607e8000)
libnemo_petsc_complex.so =>
/home/steiger/src/app-nemo/NEMO/prototype/src/math/libnemo_petsc_complex/libnemo_petsc_complex.so
(0x00007f335fc2a000)
libqhull++.so =>
/home/steiger/src/app-nemo/NEMO/libs/qhull-2010.1/lib/libqhull++.so
(0x00007f335fa09000)
libqhull.so.5 => /usr/lib/libqhull.so.5 (0x00007f335f7b8000)
libtet.so =>
/home/steiger/src/app-nemo/NEMO/libs/tetgen1.4.3/libtet.so
(0x00007f335f4d8000)
libumfpack.so.5.4.0 => /usr/lib/libumfpack.so.5.4.0
(0x00007f335f218000)
libamd.so.2.2.0 => /usr/lib/libamd.so.2.2.0 (0x00007f335f00e000)
libarpack.so =>
/home/steiger/src/app-nemo/NEMO/libs/ARPACK/libarpack.so
(0x00007f335ed72000)
libboost_filesystem.so.1.40.0 =>
/usr/lib/libboost_filesystem.so.1.40.0 (0x00007f335eb5d000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/lib/x86_64-unknown-linux-gnu_opt/libmesh.so
(0x00007f335e36a000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/liblaspack.so
(0x00007f335e149000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libmetis.so
(0x00007f335ded2000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libsfcurves.so
(0x00007f335dcce000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libgzstream.so
(0x00007f335daca000)
libz.so.1 => /lib/libz.so.1 (0x00007f335d8b2000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libgmv.so
(0x00007f335d697000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libtetgen.so
(0x00007f335d419000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libtriangle.so
(0x00007f335d1f1000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libexodusii.so
(0x00007f335cfad000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libnetcdf.so
(0x00007f335cd75000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libnemesis.so
(0x00007f335cb58000)
/home/steiger/src/app-nemo/NEMO/libs/libmesh-0.6.4/libmesh/contrib/lib/x86_64-unknown-linux-gnu_opt/libHilbert.so
(0x00007f335c940000)
libmpich.so.1.2 => /usr/lib/libmpich.so.1.2 (0x00007f335c575000)
libmpichcxx.so.1.2 => /usr/lib/libmpichcxx.so.1.2
(0x00007f335c351000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00007f335c133000)
librt.so.1 => /lib/librt.so.1 (0x00007f335bf2b000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f335bc17000)
libm.so.6 => /lib/libm.so.6 (0x00007f335b993000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f335b77c000)
libc.so.6 => /lib/libc.so.6 (0x00007f335b3fa000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3362c94000)
libgfortran.so.3 => /usr/lib/libgfortran.so.3 (0x00007f335b10c000)
libnml.so =>
/home/steiger/src/app-nemo/NEMO/MaterialDB/nml/lib/libnml.so
(0x00007f335aee5000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f335abae000)
libqhull.so =>
/home/steiger/src/app-nemo/NEMO/libs/qhull-2010.1/cpp/../lib/libqhull.so
(0x00007f335a93b000)
libboost_system.so.1.40.0 => /usr/lib/libboost_system.so.1.40.0
(0x00007f335a736000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f335a519000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f335a315000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f335a10f000)
More information about the mpich-discuss
mailing list