ADIOS2 icon indicating copy to clipboard operation
ADIOS2 copied to clipboard

Install/build issue: missing `libadios2.so` and `libadios2_sst.so`?

Open RemiLacroix-IDRIS opened this issue 3 years ago • 2 comments

Hello,

Can you think of any reasons that would cause some ADIOS libraries, namely libadios2.so and libadios2_sst.so not to be installed?

Those libraries are then required by VisIt which fails to compile without them.

I am installing with Spack but I don't think the problem is related to Spack (at least I cannot see how).

Here is the build configuration from running CMake:

ADIOS2 build configuration:
  ADIOS Version: 2.6.0
  C++ Compiler : GNU 8.3.1 
    /.../spack/lib/spack/env/gcc/g++

  Fortran Compiler : GNU 8.3.1 
    /.../spack/lib/spack/env/gcc/gfortran

  Installation prefix: /.../spack_soft/adios2/2.6.0/gcc-8.3.1-zwvahyu277pmcg7it2dke47bixnq7hmz
        bin: bin
        lib: lib64
    include: include
      cmake: lib64/cmake/adios2
     python: usr/lib64/python3.6/site-packages

  Features:
    Library Type: shared
    Build Type:   Release
    Testing: OFF
    Examples: OFF
    Build Options:
      Blosc     : ON
      BZip2     : ON
      ZFP       : ON
      SZ        : ON
      MGARD     : OFF
      PNG       : ON
      MPI       : ON
      DataMan   : ON
      Table     : ON
      SSC       : ON
      SST       : ON
      DataSpaces: OFF
      ZeroMQ    : ON
      HDF5      : ON
      IME       : OFF
      Python    : OFF
      Fortran   : ON
      SysVShMem : ON
      Profiling : ON
      Endian_Reverse: OFF
    RDMA Transport for Staging: Available

and the content of the /.../spack_soft/adios2/2.6.0/gcc-8.3.1-zwvahyu277pmcg7it2dke47bixnq7hmz/lib64/:

drwxr-sr-x 3 user group    4096 Feb 23 17:01 cmake
lrwxrwxrwx 1 user group      18 Feb 23 17:01 libadios2_atl.so -> libadios2_atl.so.2
lrwxrwxrwx 1 user group      22 Feb 23 17:01 libadios2_atl.so.2 -> libadios2_atl.so.2.2.1
-rwxr-xr-x 1 user group   60120 Feb 23 16:59 libadios2_atl.so.2.2.1
lrwxrwxrwx 1 user group      16 Feb 23 17:01 libadios2_c.so -> libadios2_c.so.2
lrwxrwxrwx 1 user group      20 Feb 23 17:01 libadios2_c.so.2 -> libadios2_c.so.2.6.0
-rwxr-xr-x 1 user group  249344 Feb 23 17:00 libadios2_c.so.2.6.0
lrwxrwxrwx 1 user group      20 Feb 23 17:01 libadios2_c_mpi.so -> libadios2_c_mpi.so.2
lrwxrwxrwx 1 user group      24 Feb 23 17:01 libadios2_c_mpi.so.2 -> libadios2_c_mpi.so.2.6.0
-rwxr-xr-x 1 user group   23936 Feb 23 17:01 libadios2_c_mpi.so.2.6.0
-rwxr-xr-x 1 user group   42824 Feb 23 16:59 libadios2_cmenet.so
-rwxr-xr-x 1 user group   22624 Feb 23 16:59 libadios2_cmepoll.so
-rwxr-xr-x 1 user group   59456 Feb 23 16:59 libadios2_cmfabric.so
-rwxr-xr-x 1 user group   23376 Feb 23 16:59 libadios2_cmmulticast.so
-rwxr-xr-x 1 user group   22408 Feb 23 16:59 libadios2_cmselect.so
-rwxr-xr-x 1 user group   42616 Feb 23 16:59 libadios2_cmsockets.so
-rwxr-xr-x 1 user group   28120 Feb 23 16:59 libadios2_cmudp.so
-rwxr-xr-x 1 user group   68936 Feb 23 16:59 libadios2_cmzplenet.so
lrwxrwxrwx 1 user group      19 Feb 23 17:01 libadios2_core.so -> libadios2_core.so.2
lrwxrwxrwx 1 user group      23 Feb 23 17:01 libadios2_core.so.2 -> libadios2_core.so.2.6.0
-rwxr-xr-x 1 user group 9266864 Feb 23 17:00 libadios2_core.so.2.6.0
lrwxrwxrwx 1 user group      23 Feb 23 17:01 libadios2_core_mpi.so -> libadios2_core_mpi.so.2
lrwxrwxrwx 1 user group      27 Feb 23 17:01 libadios2_core_mpi.so.2 -> libadios2_core_mpi.so.2.6.0
-rwxr-xr-x 1 user group 1409608 Feb 23 17:01 libadios2_core_mpi.so.2.6.0
lrwxrwxrwx 1 user group      20 Feb 23 17:01 libadios2_cxx11.so -> libadios2_cxx11.so.2
lrwxrwxrwx 1 user group      24 Feb 23 17:01 libadios2_cxx11.so.2 -> libadios2_cxx11.so.2.6.0
-rwxr-xr-x 1 user group 1630216 Feb 23 17:00 libadios2_cxx11.so.2.6.0
lrwxrwxrwx 1 user group      24 Feb 23 17:01 libadios2_cxx11_mpi.so -> libadios2_cxx11_mpi.so.2
lrwxrwxrwx 1 user group      28 Feb 23 17:01 libadios2_cxx11_mpi.so.2 -> libadios2_cxx11_mpi.so.2.6.0
-rwxr-xr-x 1 user group   37224 Feb 23 17:01 libadios2_cxx11_mpi.so.2.6.0
lrwxrwxrwx 1 user group      19 Feb 23 17:01 libadios2_dill.so -> libadios2_dill.so.2
lrwxrwxrwx 1 user group      23 Feb 23 17:01 libadios2_dill.so.2 -> libadios2_dill.so.2.4.1
-rwxr-xr-x 1 user group  205056 Feb 23 16:59 libadios2_dill.so.2.4.1
lrwxrwxrwx 1 user group      19 Feb 23 17:01 libadios2_enet.so -> libadios2_enet.so.1
lrwxrwxrwx 1 user group      24 Feb 23 17:01 libadios2_enet.so.1 -> libadios2_enet.so.1.3.14
-rwxr-xr-x 1 user group   59248 Feb 23 16:59 libadios2_enet.so.1.3.14
-rwxr-xr-x 1 user group  528992 Feb 23 16:59 libadios2_evpath.so
lrwxrwxrwx 1 user group      18 Feb 23 17:01 libadios2_ffs.so -> libadios2_ffs.so.1
lrwxrwxrwx 1 user group      22 Feb 23 17:01 libadios2_ffs.so.1 -> libadios2_ffs.so.1.6.0
-rwxr-xr-x 1 user group  427184 Feb 23 16:59 libadios2_ffs.so.1.6.0
lrwxrwxrwx 1 user group      22 Feb 23 17:01 libadios2_fortran.so -> libadios2_fortran.so.2
lrwxrwxrwx 1 user group      26 Feb 23 17:01 libadios2_fortran.so.2 -> libadios2_fortran.so.2.6.0
-rwxr-xr-x 1 user group  612360 Feb 23 17:00 libadios2_fortran.so.2.6.0
lrwxrwxrwx 1 user group      26 Feb 23 17:01 libadios2_fortran_mpi.so -> libadios2_fortran_mpi.so.2
lrwxrwxrwx 1 user group      30 Feb 23 17:01 libadios2_fortran_mpi.so.2 -> libadios2_fortran_mpi.so.2.6.0
-rwxr-xr-x 1 user group   18472 Feb 23 17:01 libadios2_fortran_mpi.so.2.6.0
-rwxr-xr-x 1 user group   24792 Feb 23 16:59 libadios2_taustubs.so

As you can see, libadios2.so and libadios2_sst.so are nowhere to be found.

Looking at Adios source code, relevant parts seem to be:

https://github.com/ornladios/ADIOS2/blob/2a61c0ea3ca01153bf905b5752f62c1950116a6a/source/adios2/CMakeLists.txt#L336-L341

together with the commit log from 97f421208bded0755bf22744c8809e8f8738974c:

Preserve the original public-facing adios2 target name as an interface library that links both adios2_core and adios2_core_mpi so that clients using that name still get both.

and

https://github.com/ornladios/ADIOS2/blob/24efd7f41c449c62ec8d03c9c13e4f5b2a3313e4/source/adios2/toolkit/sst/CMakeLists.txt#L41-L46

Am I misunderstanding those (i.e. the library names did change and VisIt has to update) or is something indeed wrong with what I get in the install dir?

Best regards, Rémi

RemiLacroix-IDRIS avatar Feb 26 '21 18:02 RemiLacroix-IDRIS

@RemiLacroix-IDRIS I can see that this is intended, at list for libadios2.

In CMAKE, an INTERFACE library is a sort of a way to to group together libraries within CMake. These group of libraries does not generate physically any library, this is we do not link those libraries together.

The reason why we need INTERFACE libraries is that when we have multiple libraries but for the sake of simplicity and ease to use we just want want to export it as a single library.

I am not sure if this was a good explanation, ping me if you need more info.

As for breaking compatibility, yeah, if you depended on those specific libraries, that commit will break it. However, if your project is a CMake project this can be easily resolved as we export those interface libraries targets.

vicentebolea avatar Jul 06 '21 20:07 vicentebolea

@RemiLacroix-IDRIS if this resolves this please close this issue.

vicentebolea avatar Jul 06 '21 20:07 vicentebolea