deal.ii FTBFS on arm64, bug in openmpi?

Bug #1841577 reported by Gianfranco Costamagna
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
deal.ii (Ubuntu)
Fix Released
Undecided
Graham Inggs

Bug Description

I share my debug on the arm64 issue.

1) deal.ii fails to use ld=GOLD on Ubuntu, while it succeeds in Debian, so the arm64 link failure is just a problem hidden in Debian because gold is correctly used.

this is what is done in the check to test if cxx and flags are usable:
cat main.cpp
int main () { return 0; }

/usr/bin/c++ -DDEAL_II_HAVE_USABLE_FLAGS_DEBUG -pedantic -fPIC -Wall -Wextra -Woverloaded-virtual -Wpointer-arith -Wsign-compare -Wsuggest-override -Wswitch -Wsynth -Wwrite-strings -Wno-placement-new -Wno-deprecated-declarations -Wno-literal-suffix -Wno-psabi -Wno-class-memaccess -std=c++17 -g -O2 -fdebug-prefix-map=/deal.ii-9.1.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wno-nonnull-compare -Wno-address -Wno-unused-local-typedefs -O0 -ggdb -Wa,--compress-debug-sections -rdynamic main.cpp -o cmTC_10815 -Wl,-rpath,/usr/lib/x86_64-linux-gnu/hdf5/openmpi:/usr/lib/x86_64-linux-gnu/openmpi/lib:/usr/lib/x86_64-linux-gnu/hdf5/openmpi/lib/lib -rdynamic -fuse-ld=gold -Wl,-Bsymbolic-functions -Wl,-z,relro -pthread -pthread -ggdb /usr/lib/x86_64-linux-gnu/libboost_iostreams.so /usr/lib/x86_64-linux-gnu/libboost_serialization.so /usr/lib/x86_64-linux-gnu/libboost_system.so /usr/lib/x86_64-linux-gnu/libboost_thread.so -pthread /usr/lib/x86_64-linux-gnu/libboost_regex.so /usr/lib/x86_64-linux-gnu/libboost_chrono.so /usr/lib/x86_64-linux-gnu/libboost_date_time.so /usr/lib/x86_64-linux-gnu/libboost_atomic.so /usr/lib/x86_64-linux-gnu/libtrilinos_pike-blackbox.so /usr/lib/x86_64-linux-gnu/libtrilinos_trilinoscouplings.so /usr/lib/x86_64-linux-gnu/libtrilinos_piro.so /usr/lib/x86_64-linux-gnu/libtrilinos_rol.so /usr/lib/x86_64-linux-gnu/libtrilinos_stokhos_muelu.so /usr/lib/x86_64-linux-gnu/libtrilinos_stokhos_ifpack2.so /usr/lib/x86_64-linux-gnu/libtrilinos_stokhos_amesos2.so /usr/lib/x86_64-linux-gnu/libtrilinos_stokhos_tpetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_stokhos_sacado.so /usr/lib/x86_64-linux-gnu/libtrilinos_stokhos.so /usr/lib/x86_64-linux-gnu/libtrilinos_rythmos.so /usr/lib/x86_64-linux-gnu/libtrilinos_muelu-adapters.so /usr/lib/x86_64-linux-gnu/libtrilinos_muelu-interface.so /usr/lib/x86_64-linux-gnu/libtrilinos_muelu.so /usr/lib/x86_64-linux-gnu/libtrilinos_moertel.so /usr/lib/x86_64-linux-gnu/libtrilinos_locathyra.so /usr/lib/x86_64-linux-gnu/libtrilinos_locaepetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_localapack.so /usr/lib/x86_64-linux-gnu/libtrilinos_loca.so /usr/lib/x86_64-linux-gnu/libtrilinos_noxepetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_noxlapack.so /usr/lib/x86_64-linux-gnu/libtrilinos_nox.so /usr/lib/x86_64-linux-gnu/libtrilinos_phalanx.so /usr/lib/x86_64-linux-gnu/libtrilinos_intrepid.so /usr/lib/x86_64-linux-gnu/libtrilinos_teko.so /usr/lib/x86_64-linux-gnu/libtrilinos_stratimikos.so /usr/lib/x86_64-linux-gnu/libtrilinos_stratimikosbelos.so /usr/lib/x86_64-linux-gnu/libtrilinos_stratimikosaztecoo.so /usr/lib/x86_64-linux-gnu/libtrilinos_stratimikosamesos.so /usr/lib/x86_64-linux-gnu/libtrilinos_stratimikosml.so /usr/lib/x86_64-linux-gnu/libtrilinos_stratimikosifpack.so /usr/lib/x86_64-linux-gnu/libtrilinos_ifpack2-adapters.so /usr/lib/x86_64-linux-gnu/libtrilinos_ifpack2.so /usr/lib/x86_64-linux-gnu/libtrilinos_anasazitpetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_ModeLaplace.so /usr/lib/x86_64-linux-gnu/libtrilinos_anasaziepetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_anasazi.so /usr/lib/x86_64-linux-gnu/libtrilinos_komplex.so /usr/lib/x86_64-linux-gnu/libtrilinos_amesos2.so /usr/lib/x86_64-linux-gnu/libtrilinos_shylu.so /usr/lib/x86_64-linux-gnu/libtrilinos_belostpetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_belosepetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_belos.so /usr/lib/x86_64-linux-gnu/libtrilinos_ml.so /usr/lib/x86_64-linux-gnu/libtrilinos_ifpack.so /usr/lib/x86_64-linux-gnu/libtrilinos_zoltan2.so /usr/lib/x86_64-linux-gnu/libtrilinos_pamgen_extras.so /usr/lib/x86_64-linux-gnu/libtrilinos_pamgen.so /usr/lib/x86_64-linux-gnu/libtrilinos_amesos.so /usr/lib/x86_64-linux-gnu/libtrilinos_galeri-xpetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_galeri-epetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_aztecoo.so /usr/lib/x86_64-linux-gnu/libtrilinos_dpliris.so /usr/lib/x86_64-linux-gnu/libtrilinos_isorropia.so /usr/lib/x86_64-linux-gnu/libtrilinos_optipack.so /usr/lib/x86_64-linux-gnu/libtrilinos_xpetra-sup.so /usr/lib/x86_64-linux-gnu/libtrilinos_xpetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_thyratpetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_thyraepetraext.so /usr/lib/x86_64-linux-gnu/libtrilinos_thyraepetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_thyracore.so /usr/lib/x86_64-linux-gnu/libtrilinos_epetraext.so /usr/lib/x86_64-linux-gnu/libtrilinos_trilinosss.so /usr/lib/x86_64-linux-gnu/libtrilinos_tpetraext.so /usr/lib/x86_64-linux-gnu/libtrilinos_tpetrainout.so /usr/lib/x86_64-linux-gnu/libtrilinos_tpetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_kokkostsqr.so /usr/lib/x86_64-linux-gnu/libtrilinos_tpetraclassiclinalg.so /usr/lib/x86_64-linux-gnu/libtrilinos_tpetraclassicnodeapi.so /usr/lib/x86_64-linux-gnu/libtrilinos_tpetraclassic.so /usr/lib/x86_64-linux-gnu/libtrilinos_triutils.so /usr/lib/x86_64-linux-gnu/libtrilinos_globipack.so /usr/lib/x86_64-linux-gnu/libtrilinos_shards.so /usr/lib/x86_64-linux-gnu/libtrilinos_zoltan.so /usr/lib/x86_64-linux-gnu/libtrilinos_epetra.so /usr/lib/x86_64-linux-gnu/libtrilinos_sacado.so /usr/lib/x86_64-linux-gnu/libtrilinos_rtop.so /usr/lib/x86_64-linux-gnu/libtrilinos_kokkoskernels.so /usr/lib/x86_64-linux-gnu/libtrilinos_teuchoskokkoscomm.so /usr/lib/x86_64-linux-gnu/libtrilinos_teuchoskokkoscompat.so /usr/lib/x86_64-linux-gnu/libtrilinos_teuchosremainder.so /usr/lib/x86_64-linux-gnu/libtrilinos_teuchosnumerics.so /usr/lib/x86_64-linux-gnu/libtrilinos_teuchoscomm.so /usr/lib/x86_64-linux-gnu/libtrilinos_teuchosparameterlist.so /usr/lib/x86_64-linux-gnu/libtrilinos_teuchoscore.so /usr/lib/x86_64-linux-gnu/libtrilinos_kokkosalgorithms.so /usr/lib/x86_64-linux-gnu/libtrilinos_kokkoscontainers.so /usr/lib/x86_64-linux-gnu/libtrilinos_kokkoscore.so /usr/lib/x86_64-linux-gnu/libsmumps.so /usr/lib/x86_64-linux-gnu/libdmumps.so /usr/lib/x86_64-linux-gnu/libcmumps.so /usr/lib/x86_64-linux-gnu/libzmumps.so /usr/lib/x86_64-linux-gnu/libpord.so /usr/lib/x86_64-linux-gnu/libmumps_common.so /usr/lib/x86_64-linux-gnu/hdf5/openmpi/libhdf5.so /usr/lib/x86_64-linux-gnu/libtbb.so /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/x86_64-linux-gnu/libptscotch.so /usr/lib/x86_64-linux-gnu/libptscotcherr.so /usr/lib/x86_64-linux-gnu/libscotch.so /usr/lib/x86_64-linux-gnu/libscotcherr.so -ldl /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/x86_64-linux-gnu/libumfpack.so /usr/lib/x86_64-linux-gnu/libcholmod.so /usr/lib/x86_64-linux-gnu/libccolamd.so /usr/lib/x86_64-linux-gnu/libcolamd.so /usr/lib/x86_64-linux-gnu/libcamd.so /usr/lib/x86_64-linux-gnu/libsuitesparseconfig.so /usr/lib/x86_64-linux-gnu/libamd.so -lrt /usr/lib/x86_64-linux-gnu/libparpack.so /usr/lib/x86_64-linux-gnu/libarpack.so /usr/lib/x86_64-linux-gnu/libassimp.so /usr/lib/x86_64-linux-gnu/libgsl.so /usr/lib/x86_64-linux-gnu/libgslcblas.so /usr/lib/x86_64-linux-gnu/hdf5/openmpi/lib/lib/libhdf5_hl.so /usr/lib/x86_64-linux-gnu/hdf5/openmpi/lib/lib/libhdf5.so /usr/lib/x86_64-linux-gnu/libmuparser.so /usr/lib/x86_64-linux-gnu/libnetcdf_c++.so /usr/lib/x86_64-linux-gnu/libnetcdf.so /usr/lib/x86_64-linux-gnu/libTKBO.so /usr/lib/x86_64-linux-gnu/libTKBool.so /usr/lib/x86_64-linux-gnu/libTKBRep.so /usr/lib/x86_64-linux-gnu/libTKernel.so /usr/lib/x86_64-linux-gnu/libTKFeat.so /usr/lib/x86_64-linux-gnu/libTKFillet.so /usr/lib/x86_64-linux-gnu/libTKG2d.so /usr/lib/x86_64-linux-gnu/libTKG3d.so /usr/lib/x86_64-linux-gnu/libTKGeomAlgo.so /usr/lib/x86_64-linux-gnu/libTKGeomBase.so /usr/lib/x86_64-linux-gnu/libTKHLR.so /usr/lib/x86_64-linux-gnu/libTKIGES.so /usr/lib/x86_64-linux-gnu/libTKMath.so /usr/lib/x86_64-linux-gnu/libTKMesh.so /usr/lib/x86_64-linux-gnu/libTKOffset.so /usr/lib/x86_64-linux-gnu/libTKPrim.so /usr/lib/x86_64-linux-gnu/libTKShHealing.so /usr/lib/x86_64-linux-gnu/libTKSTEP.so /usr/lib/x86_64-linux-gnu/libTKSTEPAttr.so /usr/lib/x86_64-linux-gnu/libTKSTEPBase.so /usr/lib/x86_64-linux-gnu/libTKSTEP209.so /usr/lib/x86_64-linux-gnu/libTKSTL.so /usr/lib/x86_64-linux-gnu/libTKTopAlgo.so /usr/lib/x86_64-linux-gnu/libTKXSBase.so /usr/lib/x86_64-linux-gnu/libp4est.so /usr/lib/x86_64-linux-gnu/libsc.so /usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so /usr/lib/x86_64-linux-gnu/liblapack.so /usr/lib/x86_64-linux-gnu/libblas.so -lgfortran -lquadmath -lm -lc -lgcc_s -lgcc /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_usempif08.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_usempi_ignore_tkr.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_mpifh.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so /usr/lib/x86_64-linux-gnu/libslepc.so /usr/lib/x86_64-linux-gnu/libpetsc.so /usr/lib/x86_64-linux-gnu/libsundials_idas.so /usr/lib/x86_64-linux-gnu/libsundials_arkode.so /usr/lib/x86_64-linux-gnu/libsundials_kinsol.so /usr/lib/x86_64-linux-gnu/libsundials_nvecserial.so /usr/lib/x86_64-linux-gnu/libsundials_nvecparallel.so
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_class_init_epoch'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_list_item_t_class'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_class_initialize'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_uses_threads'
collect2: error: ld returned 1 exit status

So I presume as soon as openmpi is built with gcc-9 asneeded flag Debian will have the same failure.

Revision history for this message
Gianfranco Costamagna (costamagnagianfranco) wrote :

Reproducible on amd64 too after configuring the project and looking at
./obj-x86_64-linux-gnu/CMakeFiles/CMakeError.log log

Changed in deal.ii (Ubuntu):
assignee: nobody → Graham Inggs (ginggs)
Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package deal.ii - 9.1.1-4ubuntu1

---------------
deal.ii (9.1.1-4ubuntu1) eoan; urgency=medium

  * Explicitly link libopen-pal to avoid apparent underlinking in openmpi,
    allowing deal.ii to be linked with the gold linker, avoiding a
    FTBFS on arm64 (LP: #1841577)

 -- Graham Inggs <email address hidden> Wed, 28 Aug 2019 00:35:52 +0000

Changed in deal.ii (Ubuntu):
status: New → Fix Released
Revision history for this message
Gianfranco Costamagna (costamagnagianfranco) wrote :

/usr/bin/c++ -DDEAL_II_HAVE_USABLE_FLAGS_DEBUG -pedantic -fPIC -Wall -Wextra -Woverloaded-virtual -Wpointer-arith -Wsign-compare -Wsuggest-override -Wswitch -Wsynth -Wwrite-strings -Wno-placement-new -Wno-deprecated-declarations -Wno-literal-suffix -Wno-psabi -Wno-class-memaccess -std=c++17 -g -O2 -fdebug-prefix-map=/deal.ii-9.1.1=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wno-nonnull-compare -Wno-address -Wno-unused-local-typedefs -O0 -ggdb -Wa,--compress-debug-sections -rdynamic main.cpp -o cmTC_10815 -Wl,-rpath,/usr/lib/x86_64-linux-gnu/hdf5/openmpi:/usr/lib/x86_64-linux-gnu/openmpi/lib:/usr/lib/x86_64-linux-gnu/hdf5/openmpi/lib/lib -rdynamic -fuse-ld=gold -Wl,-Bsymbolic-functions -Wl,-z,relro -pthread -pthread -ggdb /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_usempif08.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_usempi_ignore_tkr.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_mpifh.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_class_init_epoch'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_list_item_t_class'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_class_initialize'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_uses_threads'

Revision history for this message
Gianfranco Costamagna (costamagnagianfranco) wrote :

minimal test case:
/usr/bin/c++ main.cpp -fuse-ld=gold /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so -pthread
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_class_init_epoch'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_list_item_t_class'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_class_initialize'
/usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so: error: undefined reference to 'opal_uses_threads'

/usr/bin/c++ main.cpp -fuse-ld=gold /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so
(works)

/usr/bin/c++ main.cpp -fuse-ld=bfd /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so -pthread
(works)

/usr/bin/c++ main.cpp -fuse-ld=bfd /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi_cxx.so /usr/lib/x86_64-linux-gnu/openmpi/lib/libmpi.so
(works)

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.