Linking error with FetchContent
puneetmatharu opened this issue · 4 comments
I was previously working with an older version of your library that I forked and patched (for my own usage), but I thought I'd give your latest version a shot. My old version still works but the latest version doesn't. When I try to integrate the MUMPS project into my own using FetchContent, I encounter what appears to be a linking error (output provided below) at build time. Have you encountered this issue yourself at all, or know how to fix it?
For reference, I'm working on macOS and using a Clang compiler.
Thanks!
FAILED: _deps/mumps_project-build/tests/d_simple
: && /usr/local/bin/gfortran -Wl,-flat_namespace -Wl,-commons,use_dylibs -L/usr/local/Cellar/libevent/2.1.12/lib -L/usr/local/Cellar/libevent/2.1.12/lib -fimplicit-none -fallow-argument-mismatch -fallow-invalid-boz -g -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.0.sdk _deps/mumps_project-build/tests/CMakeFiles/d_simple.dir/d_simple.f90.o -o _deps/mumps_project-build/tests/d_simple /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib _deps/mumps_project-build/libsmumpsd.a _deps/mumps_project-build/libdmumpsd.a _deps/mumps_project-build/libmumps_commond.a /usr/local/lib/libscalapack.a -lm -ldl -framework Accelerate /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_usempif08.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_usempi_ignore_tkr.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_mpifh.dylib _deps/mumps_project-build/libpordd.a /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib && :
Undefined symbols for architecture x86_64:
"_Cblacs_abort", referenced from:
_PB_Cabort in libscalapack.a(PB_Cabort.c.o)
_PB_Cmalloc in libscalapack.a(PB_Cmalloc.c.o)
"_Cblacs_gridinfo", referenced from:
_pdtrsm_ in libscalapack.a(pdtrsm_.c.o)
_PB_Cabort in libscalapack.a(PB_Cabort.c.o)
_PB_Cchkmat in libscalapack.a(PB_Cchkmat.c.o)
_PB_Cplapad in libscalapack.a(PB_Cplapad.c.o)
_PB_CptrsmAB in libscalapack.a(PB_CptrsmAB.c.o)
_PB_CptrsmB in libscalapack.a(PB_CptrsmB.c.o)
_PB_Cwarn in libscalapack.a(PB_Cwarn.c.o)
...
"_Cblacs_pnum", referenced from:
_PB_Cwarn in libscalapack.a(PB_Cwarn.c.o)
"_Cdgamx2d", referenced from:
_pdamax_ in libscalapack.a(pdamax_.c.o)
"_Cdgebr2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
_pdamax_ in libscalapack.a(pdamax_.c.o)
_pdswap_ in libscalapack.a(pdswap_.c.o)
"_Cdgebs2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
_pdamax_ in libscalapack.a(pdamax_.c.o)
_pdswap_ in libscalapack.a(pdswap_.c.o)
"_Cdgerv2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
_pdamax_ in libscalapack.a(pdamax_.c.o)
_pdswap_ in libscalapack.a(pdswap_.c.o)
"_Cdgesd2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
_pdamax_ in libscalapack.a(pdamax_.c.o)
_pdswap_ in libscalapack.a(pdswap_.c.o)
"_Cdgsum2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
"_Cigebr2d", referenced from:
_pdamax_ in libscalapack.a(pdamax_.c.o)
"_Cigebs2d", referenced from:
_pdamax_ in libscalapack.a(pdamax_.c.o)
"_blacs_abort_", referenced from:
_pdgetf2_ in libscalapack.a(pdgetf2.f.o)
_pdpotf2_ in libscalapack.a(pdpotf2.f.o)
"_blacs_gridexit_", referenced from:
_dmumps_end_driver_ in libdmumpsd.a(dend_driver.F.o)
_dmumps_init_root_ana_ in libdmumpsd.a(dtype3_root.F.o)
"_blacs_gridinfo_", referenced from:
_dmumps_init_root_ana_ in libdmumpsd.a(dtype3_root.F.o)
_dmumps_root_solve_ in libdmumpsd.a(dsol_root_parallel.F.o)
_descinit_ in libscalapack.a(descinit.f.o)
_pdgetrs_ in libscalapack.a(pdgetrs.f.o)
_pdpotrs_ in libscalapack.a(pdpotrs.f.o)
_chk1mat_ in libscalapack.a(chk1mat.f.o)
_globchk_ in libscalapack.a(pchkxmat.f.o)
...
"_blacs_gridinit_", referenced from:
___dmumps_save_restore_MOD_dmumps_save_restore_structure in libdmumpsd.a(dmumps_save_restore.F.o)
_dmumps_init_root_ana_ in libdmumpsd.a(dtype3_root.F.o)
"_igamn2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_pdgetrf_ in libscalapack.a(pdgetrf.f.o)
"_igebr2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_pdlapiv_ in libscalapack.a(pdlapiv.f.o)
_pdgetf2_ in libscalapack.a(pdgetf2.f.o)
_pdlapv2_ in libscalapack.a(pdlapv2.f.o)
_pdpotf2_ in libscalapack.a(pdpotf2.f.o)
"_igebs2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_pdlapiv_ in libscalapack.a(pdlapiv.f.o)
_pdgetf2_ in libscalapack.a(pdgetf2.f.o)
_pdlapv2_ in libscalapack.a(pdlapv2.f.o)
_pdpotf2_ in libscalapack.a(pdpotf2.f.o)
"_igerv2d_", referenced from:
_picol2row_ in libscalapack.a(picol2row.f.o)
_pirow2col_ in libscalapack.a(pirow2col.f.o)
"_igesd2d_", referenced from:
_picol2row_ in libscalapack.a(picol2row.f.o)
_pirow2col_ in libscalapack.a(pirow2col.f.o)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
[3116/4063] Linking Fortran executable _deps/mumps_project-build/tests/mumpscfg
FAILED: _deps/mumps_project-build/tests/mumpscfg
: && /usr/local/bin/gfortran -Wl,-flat_namespace -Wl,-commons,use_dylibs -L/usr/local/Cellar/libevent/2.1.12/lib -L/usr/local/Cellar/libevent/2.1.12/lib -fimplicit-none -fallow-argument-mismatch -fallow-invalid-boz -g -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.0.sdk _deps/mumps_project-build/tests/CMakeFiles/mumpscfg.dir/test_mumps.f90.o -o _deps/mumps_project-build/tests/mumpscfg /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib _deps/mumps_project-build/libsmumpsd.a _deps/mumps_project-build/libdmumpsd.a _deps/mumps_project-build/libmumps_commond.a /usr/local/lib/libscalapack.a -lm -ldl -framework Accelerate /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_usempif08.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_usempi_ignore_tkr.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_mpifh.dylib _deps/mumps_project-build/libpordd.a /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib && :
Undefined symbols for architecture x86_64:
"_Cblacs_abort", referenced from:
_PB_Cabort in libscalapack.a(PB_Cabort.c.o)
_PB_Cmalloc in libscalapack.a(PB_Cmalloc.c.o)
"_Cblacs_gridinfo", referenced from:
_pdtrsm_ in libscalapack.a(pdtrsm_.c.o)
_PB_Cabort in libscalapack.a(PB_Cabort.c.o)
_PB_Cchkmat in libscalapack.a(PB_Cchkmat.c.o)
_PB_Cplapad in libscalapack.a(PB_Cplapad.c.o)
_PB_CptrsmAB in libscalapack.a(PB_CptrsmAB.c.o)
_PB_CptrsmB in libscalapack.a(PB_CptrsmB.c.o)
_PB_Cwarn in libscalapack.a(PB_Cwarn.c.o)
...
"_Cblacs_pnum", referenced from:
_PB_Cwarn in libscalapack.a(PB_Cwarn.c.o)
"_Cdgamx2d", referenced from:
_pdamax_ in libscalapack.a(pdamax_.c.o)
"_Cdgebr2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
_pdamax_ in libscalapack.a(pdamax_.c.o)
_pdswap_ in libscalapack.a(pdswap_.c.o)
"_Cdgebs2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
_pdamax_ in libscalapack.a(pdamax_.c.o)
_pdswap_ in libscalapack.a(pdswap_.c.o)
"_Cdgerv2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
_pdamax_ in libscalapack.a(pdamax_.c.o)
_pdswap_ in libscalapack.a(pdswap_.c.o)
"_Cdgesd2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
_pdamax_ in libscalapack.a(pdamax_.c.o)
_pdswap_ in libscalapack.a(pdswap_.c.o)
"_Cdgsum2d", referenced from:
_PB_Cdtypeset in libscalapack.a(PB_Cdtypeset.c.o)
"_Cigebr2d", referenced from:
_pdamax_ in libscalapack.a(pdamax_.c.o)
"_Cigebs2d", referenced from:
_pdamax_ in libscalapack.a(pdamax_.c.o)
"_blacs_abort_", referenced from:
_pdgetf2_ in libscalapack.a(pdgetf2.f.o)
_pdpotf2_ in libscalapack.a(pdpotf2.f.o)
"_blacs_gridexit_", referenced from:
_dmumps_end_driver_ in libdmumpsd.a(dend_driver.F.o)
_dmumps_init_root_ana_ in libdmumpsd.a(dtype3_root.F.o)
"_blacs_gridinfo_", referenced from:
_dmumps_init_root_ana_ in libdmumpsd.a(dtype3_root.F.o)
_dmumps_root_solve_ in libdmumpsd.a(dsol_root_parallel.F.o)
_descinit_ in libscalapack.a(descinit.f.o)
_pdgetrs_ in libscalapack.a(pdgetrs.f.o)
_pdpotrs_ in libscalapack.a(pdpotrs.f.o)
_chk1mat_ in libscalapack.a(chk1mat.f.o)
_globchk_ in libscalapack.a(pchkxmat.f.o)
...
"_blacs_gridinit_", referenced from:
___dmumps_save_restore_MOD_dmumps_save_restore_structure in libdmumpsd.a(dmumps_save_restore.F.o)
_dmumps_init_root_ana_ in libdmumpsd.a(dtype3_root.F.o)
"_igamn2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_pdgetrf_ in libscalapack.a(pdgetrf.f.o)
"_igebr2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_pdlapiv_ in libscalapack.a(pdlapiv.f.o)
_pdgetf2_ in libscalapack.a(pdgetf2.f.o)
_pdlapv2_ in libscalapack.a(pdlapv2.f.o)
_pdpotf2_ in libscalapack.a(pdpotf2.f.o)
"_igebs2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_pdlapiv_ in libscalapack.a(pdlapiv.f.o)
_pdgetf2_ in libscalapack.a(pdgetf2.f.o)
_pdlapv2_ in libscalapack.a(pdlapv2.f.o)
_pdpotf2_ in libscalapack.a(pdpotf2.f.o)
"_igerv2d_", referenced from:
_picol2row_ in libscalapack.a(picol2row.f.o)
_pirow2col_ in libscalapack.a(pirow2col.f.o)
"_igesd2d_", referenced from:
_picol2row_ in libscalapack.a(picol2row.f.o)
_pirow2col_ in libscalapack.a(pirow2col.f.o)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
[3117/4063] Linking Fortran executable _deps/mumps_project-build/tests/s_simple
FAILED: _deps/mumps_project-build/tests/s_simple
: && /usr/local/bin/gfortran -Wl,-flat_namespace -Wl,-commons,use_dylibs -L/usr/local/Cellar/libevent/2.1.12/lib -L/usr/local/Cellar/libevent/2.1.12/lib -fimplicit-none -fallow-argument-mismatch -fallow-invalid-boz -g -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX12.0.sdk _deps/mumps_project-build/tests/CMakeFiles/s_simple.dir/s_simple.f90.o -o _deps/mumps_project-build/tests/s_simple /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib _deps/mumps_project-build/libsmumpsd.a _deps/mumps_project-build/libdmumpsd.a _deps/mumps_project-build/libmumps_commond.a /usr/local/lib/libscalapack.a -lm -ldl -framework Accelerate /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_usempif08.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_usempi_ignore_tkr.dylib /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi_mpifh.dylib _deps/mumps_project-build/libpordd.a /usr/local/Cellar/open-mpi/4.1.1_2/lib/libmpi.dylib && :
Undefined symbols for architecture x86_64:
"_Cblacs_abort", referenced from:
_PB_Cabort in libscalapack.a(PB_Cabort.c.o)
_PB_Cmalloc in libscalapack.a(PB_Cmalloc.c.o)
"_Cblacs_gridinfo", referenced from:
_pstrsm_ in libscalapack.a(pstrsm_.c.o)
_PB_Cabort in libscalapack.a(PB_Cabort.c.o)
_PB_Cchkmat in libscalapack.a(PB_Cchkmat.c.o)
_PB_Cplapad in libscalapack.a(PB_Cplapad.c.o)
_PB_CptrsmAB in libscalapack.a(PB_CptrsmAB.c.o)
_PB_CptrsmB in libscalapack.a(PB_CptrsmB.c.o)
_PB_Cwarn in libscalapack.a(PB_Cwarn.c.o)
...
"_Cblacs_pnum", referenced from:
_PB_Cwarn in libscalapack.a(PB_Cwarn.c.o)
"_Cigebr2d", referenced from:
_psamax_ in libscalapack.a(psamax_.c.o)
"_Cigebs2d", referenced from:
_psamax_ in libscalapack.a(psamax_.c.o)
"_Csgamx2d", referenced from:
_psamax_ in libscalapack.a(psamax_.c.o)
"_Csgebr2d", referenced from:
_PB_Cstypeset in libscalapack.a(PB_Cstypeset.c.o)
_psamax_ in libscalapack.a(psamax_.c.o)
_psswap_ in libscalapack.a(psswap_.c.o)
"_Csgebs2d", referenced from:
_PB_Cstypeset in libscalapack.a(PB_Cstypeset.c.o)
_psamax_ in libscalapack.a(psamax_.c.o)
_psswap_ in libscalapack.a(psswap_.c.o)
"_Csgerv2d", referenced from:
_PB_Cstypeset in libscalapack.a(PB_Cstypeset.c.o)
_psamax_ in libscalapack.a(psamax_.c.o)
_psswap_ in libscalapack.a(psswap_.c.o)
"_Csgesd2d", referenced from:
_PB_Cstypeset in libscalapack.a(PB_Cstypeset.c.o)
_psamax_ in libscalapack.a(psamax_.c.o)
_psswap_ in libscalapack.a(psswap_.c.o)
"_Csgsum2d", referenced from:
_PB_Cstypeset in libscalapack.a(PB_Cstypeset.c.o)
"_blacs_abort_", referenced from:
_psgetf2_ in libscalapack.a(psgetf2.f.o)
_pspotf2_ in libscalapack.a(pspotf2.f.o)
"_blacs_gridexit_", referenced from:
_smumps_end_driver_ in libsmumpsd.a(send_driver.F.o)
_smumps_init_root_ana_ in libsmumpsd.a(stype3_root.F.o)
"_blacs_gridinfo_", referenced from:
_smumps_init_root_ana_ in libsmumpsd.a(stype3_root.F.o)
_smumps_root_solve_ in libsmumpsd.a(ssol_root_parallel.F.o)
_descinit_ in libscalapack.a(descinit.f.o)
_psgetrs_ in libscalapack.a(psgetrs.f.o)
_pspotrs_ in libscalapack.a(pspotrs.f.o)
_chk1mat_ in libscalapack.a(chk1mat.f.o)
_globchk_ in libscalapack.a(pchkxmat.f.o)
...
"_blacs_gridinit_", referenced from:
___smumps_save_restore_MOD_smumps_save_restore_structure in libsmumpsd.a(smumps_save_restore.F.o)
_smumps_init_root_ana_ in libsmumpsd.a(stype3_root.F.o)
"_igamn2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_psgetrf_ in libscalapack.a(psgetrf.f.o)
"_igebr2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_pslapiv_ in libscalapack.a(pslapiv.f.o)
_psgetf2_ in libscalapack.a(psgetf2.f.o)
_pslapv2_ in libscalapack.a(pslapv2.f.o)
_pspotf2_ in libscalapack.a(pspotf2.f.o)
"_igebs2d_", referenced from:
_globchk_ in libscalapack.a(pchkxmat.f.o)
_pslapiv_ in libscalapack.a(pslapiv.f.o)
_psgetf2_ in libscalapack.a(psgetf2.f.o)
_pslapv2_ in libscalapack.a(pslapv2.f.o)
_pspotf2_ in libscalapack.a(pspotf2.f.o)
"_igerv2d_", referenced from:
_picol2row_ in libscalapack.a(picol2row.f.o)
_pirow2col_ in libscalapack.a(pirow2col.f.o)
"_igesd2d_", referenced from:
_picol2row_ in libscalapack.a(picol2row.f.o)
_pirow2col_ in libscalapack.a(pirow2col.f.o)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
[3118/4063] Building Fortran object external_src/oomph_flapack/CMakeFiles/oomph_flapack.dir/stzrzf.f.o
ninja: build stopped: subcommand failed.
after (to the right of) libscalapack.a
there should be linked libblacs.a
sometimes libblacs.a is inside libscalapack.a, sometime not.
I will update FindScalapack.cmake to look for the optional libblacs.a
Here is a standalone MUMPS Cmake FetchContent example: https://github.com/scivision/mumps-fetchcontent
It works on my MacOS with:
% cmake -B build
-- The C compiler identification is AppleClang 13.0.0.13000029
-- The Fortran compiler identification is GNU 11.1.0
Works an absolute treat -- thanks!