Installation de RASPA2 sur UBUNTU 24.04

Bonjour,

Je voudrais installer RASPA2 en suivant la procédure suivante:

sudo apt install build-essential git autoconf automake libtool make
git clone https://github.com/numat/RASPA2
mkdir -vp Research/simulations
cd RASPA2/
export RASPA DIR=${HOME}/Research/simulations/
mkdir m4
aclocal
autoreconf -i
automake --add-missing
autoconf
./configure --prefix=${RASPA_DIR}
make
sudo make install

"

Cependant j'ai récemment effectué une mise à niveau vers Ubuntu 24.04. Et pendant l'installation,  quand je fais la commande

autoreconf -i

je reçois le message suivant :

configure.ac:23: warning: The macro `AC_STDC_HEADERS' is obsolete.
configure.ac:23: You should run autoupdate.
./lib/autoconf/oldnames.m4:75: AC_STDC_HEADERS is expanded from...
configure.ac:23: the top level
configure.ac:23: warning: The macro `AC_HEADER_STDC' is obsolete.
configure.ac:23: You should run autoupdate.
./lib/autoconf/headers.m4:704: AC_HEADER_STDC is expanded from...
./lib/autoconf/oldnames.m4:75: AC_STDC_HEADERS is expanded from...
configure.ac:23: the top level
configure.ac:31: warning: AC_OUTPUT should be used without arguments.
configure.ac:31: You should run autoupdate.

Comment faire SVP?Linux / Firefox 135.0

5 réponses

  1. Modérateur

    Bonjour,

    As-tu installé tout le nécessaire pour compiler ?

    sudo apt update
    sudo apt install autoconf build-essential git libtool

    Si ça ne suffit pas à débloquer ton problème, as-tu essayé d'installer comme suggéré par le message de lancer dans le dossier qui contient configure.ac :

    autoupdate

    Par ailleurs dans ton message initial tu écris :

    export RASPA DIR=${HOME}/Research/simulations/

    ... mais je pense que tu as plutôt voulu écrire :

    export RASPA_DIR=${HOME}/Research/simulations/

    Bonne chance

    0
    1. Merci pour votre réponse !

      J'ai essayé de faire ce que vous m'avez indiqué ci-dessus, mais quand j'arrive au niveau de la commande "make" je reçois ce message

      "ssoualaye@assoualaye-HP-ProBook-440-G6:~/RASPA2$ make
      Making all in src
      make[1] : on entre dans le répertoire « /home/assoualaye/RASPA2/src »
      /bin/bash ../libtool  --tag=CC   --mode=compile gcc -DPACKAGE_NAME=\"RASPA\" -DPACKAGE_TARNAME=\"raspa\" -DPACKAGE_VERSION=\"2.0\" -DPACKAGE_STRING=\"RASPA\ 2.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"raspa\" -DVERSION=\"2.0\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_MATH_H=1 -DHAVE_STRING_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I.     -g -O2 -MT output.lo -MD -MP -MF .deps/output.Tpo -c -o output.lo output.c
      libtool: compile:  gcc -DPACKAGE_NAME=\"RASPA\" -DPACKAGE_TARNAME=\"raspa\" -DPACKAGE_VERSION=\"2.0\" "-DPACKAGE_STRING=\"RASPA 2.0\"" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"raspa\" -DVERSION=\"2.0\" -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_MATH_H=1 -DHAVE_STRING_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -g -O2 -MT output.lo -MD -MP -MF .deps/output.Tpo -c output.c  -fPIC -DPIC -o .libs/output.o
      output.c:43:10: fatal error: sys/sysctl.h: No such file or directory
         43 | #include <sys/sysctl.h>
            |          ^~~~~~~~~~~~~~
      compilation terminated.
      make[1]: *** [Makefile:636 : output.lo] Erreur 1
      make[1] : on quitte le répertoire « /home/assoualaye/RASPA2/src »
      make: *** [Makefile:392 : all-recursive] Erreur 1"
      0
      1. Modérateur

        Bonjour,

        Explication courte

        C'est une erreur classique, voir par exemple ici. Il faut remplacer :

        #include <sys/sysctl.h>

        par :

        #include <stddef.h>
        #include <linux/sysctl.h>

        Explication détaillée

        Quand tu inclues <sys/sysctl.h>, ton compilateur (gcc) regarde dans les dossiers standards propre à ton système d'exploitation (sous Linux : /usr/include, /usr/local/include, etc) et ceux éventuellement passés en paramètre avec l'option -I ou -isystem.

        On parle ici d'un fichier "standard" donc il devrait être dans /usr/include/sys/sysctl.h. Malheureusement, sur les distributions modernes, on s'aperçoit que ce fichier n'existe pas ! Il n'est même fourni par aucun paquet !

        En effet si on installe apt-file :

        sudo apt update
        sudo apt install apt-file
        sudo apt-file update
        apt-file search sysctl.h | grep include/sys/sysctl.h

        ... la dernière commande ci-dessus retourne par exemple :

        (mando@velvet) (~) $ apt-file search sysctl.h | grep include/sys/sysctl.h
        python3-pycparser: /usr/share/python3-pycparser/fake_libc_include/sys/sysctl.h

        Si on modifie un peu la recherche :

        (mando@velvet) (~) $ apt-file search sysctl.h | grep /usr/include | grep /sysctl.h
        dietlibc-dev: /usr/include/diet/sys/sysctl.h
        libell-dev: /usr/include/ell/sysctl.h
        libopenafs-dev: /usr/include/afs/sysctl.h
        libxen-dev: /usr/include/xen/sysctl.h
        linux-libc-dev: /usr/include/linux/sysctl.h

        Là, on voit quelque chose d'intéressant : la dernière ligne "fleure" le bon header, donc sous réserve que le paquet linxu-libc-dev soit installé :

        sudo apt install linux-libc-dev

        ... on devrait avoir un fichier /usr/include/linux/sysctl.h.

        Vérifions. Soit le fichier toto.c qui contient :

        #include <linux/sysctl.h>
        
        int main() {
            return 0;
        }

        On compile :

        (mando@velvet) (~) $ gcc toto.c 
        In file included from toto.c:2:
        /usr/include/linux/sysctl.h:39:9: error: unknown type name ‘size_t’
           39 |         size_t *oldlenp;
              |         ^~~~~~
        /usr/include/linux/sysctl.h:28:1: note: ‘size_t’ is defined in header ‘<stddef.h>’; this is probably fixable by adding ‘#include <stddef.h>’
           27 | #include <linux/types.h>
          +++ |+#include <stddef.h>
           28 | 
        /usr/include/linux/sysctl.h:41:9: error: unknown type name ‘size_t’
           41 |         size_t newlen;
              |         ^~~~~~
        /usr/include/linux/sysctl.h:41:9: note: ‘size_t’ is defined in header ‘<stddef.h>’; this is probably fixable by adding ‘#include <stddef.h>’

        Ici le compilateur nous indique qu'il faut inclure <stddef.h> :

        #include <stddef.h>
        #include <linux/sysctl.h>
        
        int main() {
            return 0;
        }

        Cette fois le programme compile sans erreur :-)

        Bonne chance

        0
        1. Bonjour et merci pour vos orientations!

          J'ai essayé de faire comme vous m'avez indiquer, mais quand je fais :

          make

          ... voici ce qui sort :

          assoualaye@assoualaye-HP-ProBook-440-G6:~/RASPA2$ make
          Making all in src
          make[1] : on entre dans le répertoire « /home/assoualaye/RASPA2/src »
          /bin/bash ../libtool  --tag=CC   --mode=link gcc  -g -O2   -o simulate main.o libraspa2.la
          libtool: link: gcc -g -O2 -o .libs/simulate main.o  ./.libs/libraspa2.so -Wl,-rpath -Wl,/home/assoualaye/Research/simulations/lib
          /usr/bin/ld: ./.libs/libraspa2.so: undefined reference to `sysctl'
          collect2: error: ld returned 1 exit status
          make[1]: *** [Makefile:554 : simulate] Erreur 1
          make[1] : on quitte le répertoire « /home/assoualaye/RASPA2/src »
          make: *** [Makefile:392 : all-recursive] Erreur 1
          0
          1. Modérateur

            Bonjour,

            sysctl n'existe plus donc l'erreur ne me surprend pas. Mais en fait si je comprends bien ton but est d'installer raspa2. alors pourquoi ne pas essayer de l'installer directement via pip ?

            Sinon j'ai regardé un peu le code de ce dépôt. sysctl n'est utilisé que dans src/output.c et ne sert qu'à afficher des métadonnées dans un fichier de sortie. Autant dire que ça ne me paraît pas fondamental, il suffirait de commenter l'inclusion et le bloc de code suivants à l'aide de /* ... */ :

            /* #include <sys/sysctl.h> */
            
            ...
            
            /*
              // get hostname and cpu-info for linux
              #if defined (__linux__)|| defined(__linux)
                len = sizeof(buffer);
                
                mib[0] = CTL_KERN;
                mib[1] = KERN_NODENAME;
                sysctl(mib, 2, &buffer, &len, NULL, 0);
                fprintf(FilePtr,"Hostname:    %s\n",buffer);
              
                mib[0] = CTL_KERN;
                mib[1] = KERN_OSTYPE;
                sysctl(mib, 2, &buffer, &len, NULL, 0);
                fprintf(FilePtr,"OS type:     %s\n",buffer);
              
                mib[0] = CTL_KERN;
                mib[1] = KERN_OSRELEASE;
                sysctl(mib, 2, &buffer, &len, NULL, 0);
                fprintf(FilePtr,"OS release:  %s\n",buffer);
              
                mib[0] = CTL_KERN;
                mib[1] = KERN_VERSION;
                sysctl(mib, 2, &buffer, &len, NULL, 0);
                fprintf(FilePtr,"OS version:  %s\n",buffer);
                
                fprintf(FilePtr,"\n");
              #endif
            */

            Autres corrections à apporter car les compilateurs récents sont moins tolérants.

            Dans src/mc_moves.c, il faut ajouter ajouter à la suite des #include existants :

            #include "molecule.h"
            

            Dans src/molecule.h, en fin de fichier, la ligne avant le #endif :

            int numberOfReactionMoleculesForComponent(int comp);

            Dans src/input.h, en fin de fichier, la ligne avant le #endif :

            void bubble_sort(int list[], int n);

            Dans src/run.c, corriger les déclarations des variables externes en supprimant leur initialisation, qui n'a pas de sens puisqu'on parle de variables externes :

            extern bool STREAM;
            extern char *INPUT_CRYSTAL;
            extern char *PORE_SIZE_DISTRIBUTION_OUTPUT;
            extern size_t PORE_SIZE_DISTRIBUTION_OUTPUT_SIZE;
            extern char **FILE_CONTENTS;
            extern size_t *FILE_SIZES;

            Visiblement ce projet n'est plus trop maintenu. Donc je t'invite dans github à faire un fork et à travailler sur cette copie (nécessite un compte github). Quand tu seras parvenu à corriger toutes les erreurs, fais une pull request (PR) pour que tes corrections bénéficient à ce projet. Une fois ta PR soumise, elle devrait apparaître ici et ce sera au propriétaire du dépôt de l'accepter ou non. S'il l'accepte tu pourras détruire ton fork en toute sécurité puisque de toute façon tes modifications auront été incorporées dans le dépôt de départ.

            sudo apt install build-essential git autoconf automake libtool make
            git clone https://github.com/numat/RASPA2
            cd RASPA2-master/
            mkdir m4
            aclocal
            autoreconf -i
            autoupdate 
            automake --add-missing
            autoconf
            ./configure
            make -j4

            Compilateur utilisé :

            gcc --version
            gcc (Debian 14.2.0-17) 14.2.0
            Copyright (C) 2024 Free Software Foundation, Inc.
            This is free software; see the source for copying conditions.  There is NO
            warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

            Bonne chance

            0