2011-02-11 20 views
1

我們設法在Ubuntu 10.10上構建和運行代碼。該代碼使用C++編譯的GCC 4.5和fortran編譯最新版本的ifort。我們可能會被要求支持一個幾年前版本的GCC(仍然在等待客戶端規格)的老式嵌入式Linux平臺。不幸的是,他們的軟件和硬件已用於軍事用途,因此可以升級'。我的問題是,我們是否可能面臨使用舊版GCC構建應用程序的ABI問題,並將它與使用最新版ifort編譯的庫鏈接?舊版GCC的C++/Fortran語言ABI問題

+0

f77 or f90?... – Anycorn 2011-02-11 09:55:19

回答

1

你想從C++調用Fortran代碼,從Fortran調用C++代碼還是兩者都調用?如果您從C++調用Fortran代碼,我認爲您不會遇到任何問題,特別是在使用相同的Fortran編譯器時。

如果您嘗試從Fortran訪問C++代碼,這將取決於C++代碼的性質。如果Fortran可訪問函數使用C鏈接,那麼您應該沒問題,因爲C ABI是標準化的。如果這些函數使用C++連接,我預計會遇到一些麻煩,因爲C++ ABI不是標準化的,我相信GCC多年來對它們的ABI進行了很小的(可能是主要的)更改。

+0

我們用這個方法(C++ to fortran和back)都是這樣。我認爲這是一個很好的機會,我們將不得不在ARM架構上運行,這意味着我們可能不得不在Apache上運行並移植純粹的gcc arm工具鏈代碼。我們最初嘗試使用gfortran獲得代碼構建,但其預處理器的能力不如iforts(我們通過定義通用語言的結構來嚴重依賴它,然後預處理那些結構以生成用於互操作性的C++和fortran版本的結構)。 – FuNkDaDdY 2011-02-20 10:53:49