[Trilinos-Users] wrong linking flags order in CMake fortran test

Denis Davydov davydden at gmail.com
Mon Dec 14 09:18:54 EST 2015


Dear all,

On GCC 5.2. and 4.8.2 there is an issue while compiling libVerifyFortran.a during CMake configure step.
I would say -lgfortran is not in correct place. It should be further down the line to resolve those _gfortran_st_write and alike.
I have no idea how/why it worked before.

Below are the excerpts from gcc 5.2 on Ubuntu and gcc 4.8 on CentOS.

Kind regards,
Denis 


=== GCC 5.2. Ubuntu ====
-- Fortran name mangling: LOWER UNDER
-- Detecting Fortran/C Interface
-- Detecting Fortran/C Interface - Found GLOBAL and MODULE mangling
-- Verifying Fortran/CXX Compiler Compatibility
-- Verifying Fortran/CXX Compiler Compatibility - Failed
CMake Error at /usr/share/cmake-3.2/Modules/FortranCInterface.cmake:332 (message):
  The Fortran compiler:

    /usr/bin/mpif90

  and the CXX compiler:

    /usr/bin/mpicxx

  failed to compile a simple test project using both languages.  The output
  was:

    Change Dir: /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX
    
    Run Build Command:"/usr/bin/make"
    /usr/bin/cmake -H/usr/share/cmake-3.2/Modules/FortranCInterface/Verify -B/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX --check-build-system CMakeFiles/Makefile.cmake 0
    /usr/bin/cmake -E cmake_progress_start /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles/progress.marks
    /usr/bin/make -f CMakeFiles/Makefile2 all
    make[1]: Entering directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    /usr/bin/make -f CMakeFiles/VerifyFortran.dir/build.make CMakeFiles/VerifyFortran.dir/depend
    make[2]: Entering directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    cd /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /usr/share/cmake-3.2/Modules/FortranCInterface/Verify /usr/share/cmake-3.2/Modules/FortranCInterface/Verify /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles/VerifyFortran.dir/DependInfo.cmake
    Scanning dependencies of target VerifyFortran
    make[2]: Leaving directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    /usr/bin/make -f CMakeFiles/VerifyFortran.dir/build.make CMakeFiles/VerifyFortran.dir/requires
    make[2]: Entering directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    make[2]: Nothing to be done for 'CMakeFiles/VerifyFortran.dir/requires'.
    make[2]: Leaving directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    /usr/bin/make -f CMakeFiles/VerifyFortran.dir/build.make CMakeFiles/VerifyFortran.dir/build
    make[2]: Entering directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    /usr/bin/cmake -E cmake_progress_report /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles 1
    [ 25%] Building Fortran object CMakeFiles/VerifyFortran.dir/VerifyFortran.f.o
    /usr/bin/mpif90  -DVERIFY_CXX -Os -w -pipe  -march=core2 -O3 -I/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX    -c /usr/share/cmake-3.2/Modules/FortranCInterface/Verify/VerifyFortran.f -o CMakeFiles/VerifyFortran.dir/VerifyFortran.f.o
    Linking Fortran static library libVerifyFortran.a
    /usr/bin/cmake -P CMakeFiles/VerifyFortran.dir/cmake_clean_target.cmake
    /usr/bin/cmake -E cmake_link_script CMakeFiles/VerifyFortran.dir/link.txt --verbose=1
    /usr/bin/ar cq libVerifyFortran.a  CMakeFiles/VerifyFortran.dir/VerifyFortran.f.o
    /usr/bin/ranlib libVerifyFortran.a
    make[2]: Leaving directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    /usr/bin/cmake -E cmake_progress_report /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles  1
    [ 25%] Built target VerifyFortran
    /usr/bin/make -f CMakeFiles/VerifyFortranC.dir/build.make CMakeFiles/VerifyFortranC.dir/depend
    make[2]: Entering directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    cd /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /usr/share/cmake-3.2/Modules/FortranCInterface/Verify /usr/share/cmake-3.2/Modules/FortranCInterface/Verify /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles/VerifyFortranC.dir/DependInfo.cmake
    Scanning dependencies of target VerifyFortranC
    make[2]: Leaving directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    /usr/bin/make -f CMakeFiles/VerifyFortranC.dir/build.make CMakeFiles/VerifyFortranC.dir/build
    make[2]: Entering directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    /usr/bin/cmake -E cmake_progress_report /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles 2
    [ 50%] Building C object CMakeFiles/VerifyFortranC.dir/main.c.o
    /usr/bin/mpicc  -DVERIFY_CXX -Os -w -pipe -march=core2 -O3 -I/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX    -o CMakeFiles/VerifyFortranC.dir/main.c.o   -c /usr/share/cmake-3.2/Modules/FortranCInterface/Verify/main.c
    /usr/bin/cmake -E cmake_progress_report /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles 3
    [ 75%] Building C object CMakeFiles/VerifyFortranC.dir/VerifyC.c.o
    /usr/bin/mpicc  -DVERIFY_CXX -Os -w -pipe -march=core2 -O3 -I/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX    -o CMakeFiles/VerifyFortranC.dir/VerifyC.c.o   -c /usr/share/cmake-3.2/Modules/FortranCInterface/Verify/VerifyC.c
    /usr/bin/cmake -E cmake_progress_report /tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX/CMakeFiles 4
    [100%] Building CXX object CMakeFiles/VerifyFortranC.dir/VerifyCXX.cxx.o
    /usr/bin/mpicxx   -DVERIFY_CXX -Os -w -pipe -march=core2 -O3 -I/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX    -o CMakeFiles/VerifyFortranC.dir/VerifyCXX.cxx.o -c /usr/share/cmake-3.2/Modules/FortranCInterface/Verify/VerifyCXX.cxx
    Linking CXX executable VerifyFortranC
    /usr/bin/cmake -E cmake_link_script CMakeFiles/VerifyFortranC.dir/link.txt --verbose=1
    /usr/bin/mpicxx     -Os -w -pipe -march=core2 -O3   -L/home/linuxbrew/.linuxbrew/lib -Wl,-rpath,/home/linuxbrew/.linuxbrew/lib -L/usr/lib/gcc/x86_64-linux-gnu/5 -lgfortran CMakeFiles/VerifyFortranC.dir/main.c.o CMakeFiles/VerifyFortranC.dir/VerifyC.c.o CMakeFiles/VerifyFortranC.dir/VerifyCXX.cxx.o  -o VerifyFortranC -rdynamic libVerifyFortran.a -lmpi_f90 -lmpi_f77 -lquadmath 
    libVerifyFortran.a(VerifyFortran.f.o): In function `verifyfortran_':
    VerifyFortran.f:(.text+0x2b): undefined reference to `_gfortran_st_write'
    VerifyFortran.f:(.text+0x3d): undefined reference to `_gfortran_transfer_character_write'
    VerifyFortran.f:(.text+0x45): undefined reference to `_gfortran_st_write_done'
    collect2: error: ld returned 1 exit status
    CMakeFiles/VerifyFortranC.dir/build.make:139: recipe for target 'VerifyFortranC' failed
    make[2]: Leaving directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    make[2]: *** [VerifyFortranC] Error 1
    CMakeFiles/Makefile2:99: recipe for target 'CMakeFiles/VerifyFortranC.dir/all' failed
    make[1]: Leaving directory '/tmp/trilinos20151214-30361-1lzw0bv/trilinos-12.2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    Makefile:78: recipe for target 'all' failed
    make[1]: *** [CMakeFiles/VerifyFortranC.dir/all] Error 2
    make: *** [all] Error 2
    
Call Stack (most recent call first):
  cmake/tribits/core/package_arch/TribitsFortranMangling.cmake:50 (FortranCInterface_VERIFY)
  cmake/tribits/core/package_arch/TribitsGlobalMacros.cmake:1713 (INCLUDE)
  cmake/tribits/core/package_arch/TribitsProjectImpl.cmake:188 (TRIBITS_SETUP_ENV)
  cmake/tribits/core/package_arch/TribitsProject.cmake:93 (TRIBITS_PROJECT_IMPL)
  CMakeLists.txt:89 (TRIBITS_PROJECT)


-- Configuring incomplete, errors occurred!

=== GCC 4.8 CentOS ===
/opt/openmpi/bin/mpicxx     -Os -w -pipe -march=core2 -O3   -L/home/        praveen/.linuxbrew/lib -Wl,-rpath,/home/praveen/.linuxbrew/lib -L/opt/rh/       devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2 -lgfortran CMakeFiles/  VerifyFortranC.dir/main.c.o CMakeFiles/VerifyFortranC.dir/VerifyC.c.o           CMakeFiles/VerifyFortranC.dir/VerifyCXX.cxx.o  -o VerifyFortranC                libVerifyFortran.a -lmpi_f90 -lmpi_f77 -lquadmath
    libVerifyFortran.a(VerifyFortran.f.o): In function `verifyfortran_':
    VerifyFortran.f:(.text+0x3d): undefined reference to                        `_gfortran_transfer_character_write'
    collect2: error: ld returned 1 exit status
    gmake[2]: *** [VerifyFortranC] Error 1
    gmake[2]: Leaving directory `/tmp/trilinos20151212-8095-cal2og/trilinos-12. 2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    gmake[1]: *** [CMakeFiles/VerifyFortranC.dir/all] Error 2
    gmake[1]: Leaving directory `/tmp/trilinos20151212-8095-cal2og/trilinos-12. 2.1-Source/build/CMakeFiles/FortranCInterface/VerifyCXX'
    gmake: *** [all] Error 2

Call Stack (most recent call first):
  cmake/tribits/core/package_arch/TribitsFortranMangling.cmake:50               (FortranCInterface_VERIFY)
  cmake/tribits/core/package_arch/TribitsGlobalMacros.cmake:1713 (INCLUDE)
  cmake/tribits/core/package_arch/TribitsProjectImpl.cmake:188                  (TRIBITS_SETUP_ENV)
  cmake/tribits/core/package_arch/TribitsProject.cmake:93 (TRIBITS_PROJECT_IMPL)
  CMakeLists.txt:89 (TRIBITS_PROJECT)



More information about the Trilinos-Users mailing list