3.1.14. 言語間結合(オブジェクトの互換性について)¶
ここでは富士通コンパイラで作成したFotran、C(trad/clang)、C++(trad/clang)の各オブジェクトの互換性とリンクに関する注意事項を示します。
言語間結合の詳細は次のマニュアルを参照ください。
- Fortran使用手引書
第11章 言語間結合第12章 並列化機能- C言語使用手引書
第4章 並列化機能第7章 言語間結合における注意事項9.6 言語間結合における注意事項- C++言語使用手引書
第4章 並列化機能第7章 言語間結合における注意事項9.6 言語間結合およびtradモードのオブジェクトとの結合における注意事項- プロファイラ使用手引書
5.1.6 MPIプログラムの言語間結合
3.1.14.1. オブジェクトの互換性¶
次のオブジェクトは相互にリンク可能です。
Fortranで作成したオブジェクト
Cのtradモードで作成したオブジェクト
Cのclangモードで作成したオブジェクト
C++のオブジェクトのどれか一種類
3.1.14.2. C++のオブジェクト¶
C++のオブジェクトは同じSTLを使用しているオブジェクトのみがリンク可能です。
使用するSTLは次の3つに分類されます。これらのオブジェクトを混在して使用することはできません。
C++のtradモードで作成したオブジェクト
C++のclangモードでSTLにlibc++を使用し作成したオブジェクト
C++のclangモードでSTLにlibstdc++を使用し作成したオブジェクト
3.1.14.3. 言語間結合¶
マニュアル「Fortran使用手引書」「C言語使用手引書」「C++言語使用手引書」を参照ください。
ここではリンク時の翻訳コマンドのみを示します。
言語間結合する場合、リンク時に使用する翻訳コマンドと必須オプションは、結合させる言語により異なります。
下表は、クロスコンパイラを利用する場合の組合せです。 ネイティブコンパイラを利用する場合は、frtpx/fccpx/FCCpxコマンドをそれぞれfrt/fcc/FCCコマンドに読み替えてください。 MPIを使用する場合はMPI用のコマンドに読み替えてください。
リンク時に使用する翻訳コマンド |
Fortranオブジェクト |
Cオブジェクト |
C++オブジェクト |
---|---|---|---|
Fortran |
frtpx |
frtpx |
|
C |
|
fccpx |
未対応。FCCpxを使用する。 |
C++ |
|
FCCpx |
FCCpx |
リンクの例を以下に示します。
リンク時にFortranを使用し、FortranオブジェクトとCオブジェクトをリンクする場合:
frtpx -c fortmain.f95
fccpx -c cfunc.c
frtpx -o a.out fortmain.o cfunc.o
リンク時にFortranを使用し、FortranオブジェクトとCオブジェクトをリンクする場合(Cがmainの場合):
frtpx -c fortsub.f95
fccpx -c cmain.c
frtpx -mlcmain=main -o a.out cmain.o fortsub.o
リンク時にCを使用し、FortranオブジェクトとCオブジェクトをリンクする場合:
frtpx -c fortmain.f95
fccpx -c cfunc.c
fccpx --linkfortran -o a.out fortmain.o cfunc.o
リンク時にCを使用し、FortranオブジェクトとCオブジェクトをリンクする場合(Cがmainの場合):
frtpx -c fortsub.f95
fccpx -c cmain.c
fccpx --linkfortran -o a.out cmain.o fortsub.o
リンク時にFortranを使用し、Fortranオブジェクトとtradモードで作成したC++オブジェクトをリンクする場合:
frtpx -c fortmain.f95
FCCpx -c cppfunc.cc
frtpx --linkstl=libfjc++ -o a.out fortmain.o cppfunc.o
リンク時にFortranを使用し、Fortranオブジェクトとtradモードで作成したC++オブジェクトをリンクする場合(C++がmainの場合):
frtpx -c fortsub.f95
FCCpx -c cppmain.cc
frtpx -mlcmain=main --linkstl=libfjc++ -o a.out cppmain.o fortsub.o
リンク時にFortranを使用し、Fortranオブジェクトとclangモードにおいて-stdlib=libc++オプションを指定して作成したC++オブジェクトをリンクする場合:
frtpx -c fortmain.f95
FCCpx -Nclang -stdlib=libc++ -c cppfunc.cc
frtpx --linkstl=libc++ -o a.out fortmain.o cppfunc.o
リンク時にFortranを使用し、Fortranオブジェクトとclangモードにおいて-stdlib=libstdc++オプションを使用して作成したC++オブジェクトをリンクする場合:
frtpx -c fortmain.f95
FCCpx -Nclang -c cppfunc.cc
frtpx --linkstl=libstdc++ -o a.out fortmain.o cppfunc.o
libstdc++はC++コンパイラのclangモードにおいて、デフォルトで使用されるSTLです。
リンク時にC++を使用し、Fortranオブジェクトとtradモードで作成したC++オブジェクトをリンクする場合:
frtpx -c fortmain.f95
FCCpx -c cppfunc.cc
FCCpx --linkfortran -o a.out fortmain.o cppfunc.o
リンク時にC++を使用し、Fortranオブジェクトとtradモードで作成したC++オブジェクトをリンクする場合(C++がmainの場合):
frtpx -c fortsub.f95
FCCpx -c cppmain.cc
FCCpx --linkfortran -o a.out cppmain.o fortsub.o
リンク時にC++を使用し、Fortranオブジェクトとclangモードにおいて-stdlib=libc++オプションを指定して作成したC++オブジェクトをリンクする場合:
frtpx -c fortmain.f95
FCCpx -Nclang -stdlib=libc++ -c cppfunc.cc
FCCpx -Nclang -stdlib=libc++ --linkfortran -o a.out fortmain.o cppfunc.o
リンク時にC++を使用し、Fortranオブジェクトとclangモードにおいて-stdlib=libstdc++オプションを使用して作成したC++オブジェクトをリンクする場合:
frtpx -c fortmain.f95
FCCpx -Nclang -c cppfunc.cc
FCCpx -Nclang --linkfortran -o a.out fortmain.o cppfunc.o
libstdc++はC++コンパイラのclangモードにおいて、デフォルトで使用されるSTLです。
リンク時にC++を使用し、Cオブジェクトとtradモードで作成したC++オブジェクトをリンクする場合:
fccpx -c cmain.c
FCCpx -c cppfunc.cc
FCCpx -o a.out cmain.o cppfunc.o
リンク時にC++を使用し、Cオブジェクトとclangモードにおいて-stdlib=libc++オプションを指定して作成したC++オブジェクトをリンクする場合:
fccpx -c cmain.c
FCCpx -Nclang -stdlib=libc++ -c cppfunc.cc
FCCpx -Nclang -stdlib=libc++ -o a.out cmain.o cppfunc.o
リンク時にC++を使用し、Cオブジェクトとclangモードにおいて-stdlib=libstdc++オプションを使用して作成したC++オブジェクトをリンクする場合:
fccpx -c cmain.c
FCCpx -Nclang -c cppfunc.cc
FCCpx -Nclang -o a.out cmain.o cppfunc.o
libstdc++はC++コンパイラのclangモードにおいて、デフォルトで使用されるSTLです。
3.1.14.4. MPIプログラムの言語間結合¶
MPIプログラムを言語間結合する場合は、リンク時に以下のオプションを指定してください。 プロファイラを使用するときに必要なライブラリをリンクします。
使用するリンクコマンド |
指定が必要なオプション |
---|---|
mpifccpxコマンド(ネイティブコンパイラではmpifccコマンド)
mpiFCCpxコマンド(ネイティブコンパイラではmpiFCCコマンド)
|
-lfjprofmpifオプション |
mpifrtpxコマンド(ネイティブコンパイラではmpifrtコマンド) |
-lfjprofmpiオプション |
使用例:
mpifrtpx -o a.out fortmain.o cfunc.o -lfjprofmpi
mpifccpx --linkfortran -o a.out fortmain.o cfunc.o -lfjprofmpif
3.1.14.5. 富士通コンパイラと他コンパイラのオブジェクト互換性¶
「プログラミングガイド プログラミング共通編」の「富士通コンパイラと他コンパイラが生成するオブジェクトの互換性について」を参照ください。