Interfa

2 réponses
Avatar
Lucas Levrel
Bonjour,

J'écris une petite bibliothèque d'outils de calcul numérique. Elle devra
être utilisable aussi bien par des utilisateurs de C que de Fortran (même
77). Cela m'amène plusieurs questions.

En ce qui concerne les types numériques, au sein d'une architecture
donnée, a-t-on double==DOUBLE PRECISION, float==REAL, int==INTEGER ? Je
suppose que « ça dépend », donc je précise que je cible les architectures
modernes utilisées en calcul intensif.

Au sujet du nommage des fonctions, j'ai constaté que la compilation avec
gfortran d'un code Fortran comportant l'instruction EXTERNAL MaChIn
conduit le linker à rechercher l'objet machin_. Est-ce garanti ou est-ce
spécifique à gfortran, à la version de Fortran, ou à certains OS ? Comme
la compilation à partir de C n'ajoute pas d'underscore, quelle est la
façon canonique de procéder pour obtenir une bibliothèque utilisable aussi
bien en C qu'en Fortran (avec le même nom pour les fonctions) ?

S'il y a des pièges classiques dans lesquels je suis susceptibles de
tomber, n'hésitez pas (à me les faire éviter) !

Merci.

--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)

2 réponses

Avatar
espie
In article ,
Lucas Levrel wrote:
Bonjour,

J'écris une petite bibliothèque d'outils de calcul numérique. Elle devra
être utilisable aussi bien par des utilisateurs de C que de Fortran (même
77). Cela m'amène plusieurs questions.

En ce qui concerne les types numériques, au sein d'une architecture
donnée, a-t-on double==DOUBLE PRECISION, float==REAL, int==INTEGER ? Je
suppose que « ça dépend », donc je précise que je cible les architectures
modernes utilisées en calcul intensif.

Au sujet du nommage des fonctions, j'ai constaté que la compilation avec
gfortran d'un code Fortran comportant l'instruction EXTERNAL MaChIn
conduit le linker à rechercher l'objet machin_. Est-ce garanti ou est-ce
spécifique à gfortran, à la version de Fortran, ou à certains OS ? Comme
la compilation à partir de C n'ajoute pas d'underscore, quelle est la
façon canonique de procéder pour obtenir une bibliothèque utilisable aussi
bien en C qu'en Fortran (avec le même nom pour les fonctions) ?

S'il y a des pièges classiques dans lesquels je suis susceptibles de
tomber, n'hésitez pas (à me les faire éviter) !

Merci.



Fortran a generalement tendance a passer ses parametres par reference...
ca va generalement te donner des pointeurs dans du code C.

Les nommages sont assez specifiques au langage. Note que l'absence
d'underscore en C est la-aussi lie au systeme precis. Sur des archis
autres que ELF, tu auras du _ (mais je soupconne que ca te concerne peu).

Apres, tu peux toujours aller gratter du cote de libffi... genre, choisis
un langage pour ta bibliotheque, ecris-tout avec, et regarde ce qu'il
te faut mettre comme indications pour que libffi sache s'en servir.
Avatar
Lucas Levrel
Au fait, je n'avais pas précisé : je poste ici car j'écris la bibli en C.

Le 23 janvier 2015, Marc Espie a écrit :
Fortran a generalement tendance a passer ses parametres par reference...
ca va generalement te donner des pointeurs dans du code C.



Ça je savais. Ça ne m'a pas empêché de faire l'erreur dans une fonction
qui attendait un double en paramètre, mais bizarrement ça fonctionnait
quand même ! Il faut croire que le linker est malin.

Les nommages sont assez specifiques au langage. Note que l'absence
d'underscore en C est la-aussi lie au systeme precis. Sur des archis
autres que ELF, tu auras du _ (mais je soupconne que ca te concerne peu).



OK.

Apres, tu peux toujours aller gratter du cote de libffi... genre, choisis
un langage pour ta bibliotheque, ecris-tout avec, et regarde ce qu'il
te faut mettre comme indications pour que libffi sache s'en servir.



Merci pour le pointeur. Ça s'occupe aussi de la correspondance des types ?

--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)