2011-02-11 2 views
1

Nous avons réussi à développer notre code sous Ubuntu 10.10. Le code utilise à la fois C++ compilé avec GCC 4.5 et fortran compilé avec la dernière version de ifort. Nous pouvons être tenus de prendre en charge une ancienne plate-forme Linux embarquée avec une version de GCC vieille de plusieurs années (en attente des spécifications du client). Malheureusement, leurs logiciels et matériels ont été conçus pour un usage militaire, ce qui permet de les mettre à niveau. Ma question est: sommes-nous susceptibles de faire face à des problèmes d'ABI en construisant notre application avec l'ancienne version de GCC et en la reliant à des bibliothèques compilées avec la dernière version d'ifort?Problèmes ABI C++/Fortran inter langage avec les anciennes versions de GCC

+0

f77 ou f90? ... – Anycorn

Répondre

1

Essayez-vous d'appeler le code Fortran à partir de C++, appelez le code C++ à partir de Fortran, ou les deux? Si vous appelez du code Fortran à partir de C++, je ne pense pas que vous aurez un problème, surtout si vous utilisez le même compilateur Fortran.

Si vous essayez d'accéder au code C++ à partir de Fortran, cela dépendra de la nature du code C++. Si les fonctions accessibles par Fortran utilisent la liaison C, alors cela devrait être correct, car le C ABI est standardisé. Si les fonctions utilisent le couplage C++, je m'attendrais à avoir quelques problèmes, car l'ABI C++ n'est pas standardisé et je suis sûr que GCC a apporté des modifications mineures (et peut-être majeures) à son ABI au cours des années.

+0

Nous allons dans les deux sens avec cela (C++ à fortran et retour). Je pense qu'il y a de bonnes chances que nous devions mettre cela en place sur une architecture ARM, ce qui signifie que nous devrons probablement abandonner ifort et porter le code pour une chaîne d'outils purement gcc. Nous avons d'abord essayé d'obtenir le code avec gfortran, mais son préprocesseur n'était pas aussi performant que nous le faisons (nous en dépendons fortement en définissant des structures dans un langage générique, puis prétraitons ces structures pour générer des versions C++ et fortran d'interopérabilité).). – FuNkDaDdY

Questions connexes