Important: Please read the Qt Code of Conduct -

[SOLVED] Compiling Fortran code with gfortran within a C++ project

  • Hi everyone!

    I'm working on a numerical library with Qt Creator (a C++ project using qmake). As it is with numerical projects, I have some Fortran code that I want to use in the project. I have .for files that are (currently) compiled with g++ and a header that links those objects to the C++ code.

    However, when I try to actually use those functions, the compiler complains about undefined reference to gfortran... . Now, I'm pretty sure this comes from bad linking at compile time.

    The question is: how can I use gfortran to compile the .for files and g++ to compile the .cpp files? Can I define a new variable in qmake, a new build step in the Qt Creator interface?

    Anyhow, thanks for your time,

  • Moderators

    Check out qmake's QMAKE_EXTRA_COMPILERS

    I don't have a link handy, but Google can tell you more.

    There's also the ability to add custom build steps under the Build Settings in Qt Creator.

  • Yes, I tried the former:
    zbesh.for \

    fortran.output = ${QMAKE_FILE_BASE}.o
    fortran.commands = gfortran ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
    fortran.input = FORTRAN_SOURCES

    Based on a "document": about qmake. However, I get

    @undefined reference to `main'@

    when I try to build this. I think that's because gfortran thinks I'm compiling an executable, while I'm compiling a static library. But qmake knows that:
    @TEMPLATE = lib
    CONFIG += staticlib@

    Can I pass those options to the custom compiler? There seems to be a CONFIG field for the custom compiler, but I'm not sure of the syntax.

    As for the latter, adding custom build steps to compile only certain files seems complicated.

  • Or, as "this": suggests, could I pass the option -lgfortran selectively to the Fortran source files?

  • Or "this":, which suggest to use
    @f77 -c testF.f
    g++ -c testC.cpp
    g++ -o test testF.o testC.o -lg2c@

    but how to make the last line happen automatically? --

  • Nevermind. I am just plain stupid. In the program that uses the library, I forgot to add the line
    @LIBS += -lgfortran@

    In the library .pro file, one should just list the Fortran source files in the SOURCES. qmake will take care of the rest. The -lgfortran lib is also unnecessary for the library.

  • Moderators

    Ah, very nice! Good to know! Glad you got it solved!

Log in to reply