Bonjour à tous !
Dans le cadre de mon travail de thèse, j'utilise le logiciel REFPROP publié par le NIST (National Institute of Standards and Technology, organisme de normalisation américain). Ce dernier permet le calcul de caractéristiques thermodynamiques de fluides et de mélanges de fluides. Les routines de calcul de ce logiciel, publié pour Windows, sont écrites en Fortran et fournies avec le logiciel. Cela permet notamment de les utiliser directement dans des logiciels "maison", d'y faire appel sous la forme d'une librairie dans d'autres logiciels (exemple: dll dans excel), etc...
Pour ma part, je souhaite utiliser ces routines sous MatLab (ou idéalement, Octave...). Dans les exemples d'utilisation des routines du soft, figure un exemple, rédigé en Fortran, servant à compiler un binaire utilisable par MatLab.
Pour compiler un binaire pour MatLab, il est nécessaire d'utiliser l'utilitaire mex qui fait lui-même appel au compilateur nécessaire. Pour ma part, en Fortran, ce compilateur est g95, configuré comme il suit.
1 2 3 4 5 6 7
|
FC='g95'
FFLAGS='-fexceptions -ffree-form -ffixed-line-length-none'
FFLAGS="$FFLAGS -fPIC"
FLIBS="$RPATH $MLIBS -lm"
FOPTIMFLAGS='-O'
FDEBUGFLAGS='-g' |
Notez que le résultat de la compilation est le même si le compilateur est appelé directement avec les options ci-dessus.
Le code Fortran se compile très bien sur une architecture 32 bits avec le compilateur g95, sur Linux. Il fonctionne ensuite parfaitement sur MatLab.
La commande de compilation utilisée est la suivante :
mex refpropm.f90 ./fortran/*.FOR
Au passage sur une architecture 64 bits, la même version de g95, mais pour 64 bits, retourne l'erreur suivante à la compilation :
1 2 3 4 5 6
|
ld: /tmp/ccC8hq9B.o: relocation R_X86_64_32S against `a local symbol'
can not be used when making a shared object; recompile with -fPIC
/tmp/ccC8hq9B.o: could not read symbols: Bad value
mex: link of 'refpropm.mexa64' failed. |
Savez-vous d'OU vient ce type d'erreur et quelle est la voie pour la corriger ?
Références :
Plus d'information sur le logiciel REFPROP
Plus d'information sur le NIST
EDIT: Je ne peux utiliser un autre compilateur pour des raisons de compatibilité avec MatLab. Par exemple, gfortran, intégré à gcc, n'est pas valable pour mon application
Partager