Intelコンパイラ:Fortranコンパイル済みライブラリをCのメインプログラムにリンクする

ジャック

だから私は特別な数学関数を使いたかったのですが、それを持っているCライブラリを見つけることができませんでした、しかしそれを実装した古いFortranライブラリスレートを見つけたので、それを使うために私はこれらの命令を私の場合に適応させました:http ://difdop.polytechnique.fr/wiki/index.php/How_to_Bessel_Functions_in_C

コンパイルにmakefileを使用しています。これは、GNUの場合のコンテンツの抜粋です。

CFLAGS=-Wall -O2
CC=gcc
MPICC=mpicc -DDEBUG_INPUT
LIBS=-lm -lgfortran

THIS_DIR=$(shell pwd)

WEAKWEAK_OBJECTS=manager_weakweak.o worker_weakweak.o bunch_weak.o transform_weak.o cyclic_array.o
WEAKSTRONG_OBJECTS=manager_weakstrong.o worker_weakstrong.o bunch_strong.o fbi_weakstrong.o rw_weakstrong.o
../mbtrack-mpi : ./besselh/libamos.a mbtrack-mpi.o confmpi.o input.o test.o ${WEAKWEAK_OBJECTS} ${WEAKSTRONG_OBJECTS} bunch.o stats.o physic.o statistics.o tracking.o rw_table.o rw_new.o lagrange.o feedback.o nrutil.o
    ${MPICC} $(CFLAGS) $^ -o $@ $(LIBS) -L$(THIS_DIR)/besselh $(THIS_DIR)/besselh/libamos.a

すべてがGNUコンパイラーで見事に機能しますが、私は現在、主にIntelコンパイラーを使用するクラスターでコンパイルしようとしていますが、-lgfortran見つかりません。

Intelのドキュメントを読んだところ、-nofor-mainフラグを使用するとリンクが発生するはずですが、コンパイラはリンクエラーについて文句を言うだけです。

    cc -DDEBUG_INPUT -Wall -O2  -I/opt/local/include besselh/libamos.a mbtrack-mpi.o 
 confmpi.o input.o test.o manager_weakweak.o worker_weakweak.o bunch_weak.o 
 transform_weak.o cyclic_array.o manager_weakstrong.o worker_weakstrong.o 
 bunch_strong.o fbi_weakstrong.o rw_weakstrong.o bunch.o stats.o physic.o statistics.o 
 tracking.o rw_table.o rw_new.o lagrange.o feedback.o nrutil.o -o ../mbtrack-mpi -lm -
 lifcore -lifcoremt  -L/global/u1/j/jackb/work/new_rw_2/src/besselh 
 /global/u1/j/jackb/work/new_rw_2/src/besselh/libamos.a

/opt/intel/composer_xe_2013_sp1.2.144/compiler/lib/intel64/libifcore.a(for_main.o): dans la fonction « main »:

for_main.c:(.text+0x54): référence indéfinie vers « MAIN__ »
/usr/bin/ld: erreurs de lien trouvés, destruction de l'exécutable « ../mbtrack-mpi »
make: *** [../mbtrack-mpi] Erreur 1

GNUコンパイラで使用した-lgfortranライブラリフラグのような単純なものがあるかどうか疑問に思いましたか?

クラスター上のコンパイラーを適合させるために:

ライブラリをコンパイルするためのルールは次のとおりです。

   ./besselh/libamos.a : FORCE
               cd besselh/; $(MAKE) libamos.a

そして、besselhディレクトリのMakefileの内容:

libamos.a: $(files_o)
#       ftn -nofor-main -fdefault-real-8 -fdefault-double-8 -c $(files_f)
        ar cru libamos.a $(files_o)
        ranlib libamos.a

$(files_o): $(files_f)
        ftn -nofor-main -c $(files_f)
clean: 
        rm -f $(files_o)
        rm -f libamos.a
ウラジミールF

Cでベッセル関数が必要な場合は、C99標準の関数では不十分ですか?http://www.gnu.org/software/libc/manual/html_node/Special-Functions.html

IntelFortran固有のFortranを無効にする正しいオプションmain-nofor-mainです。

libgfortrangfortranのFortranランタイムライブラリです。fortranサブルーチンをgfortranでコンパイルし、iccそれを使用コンパイルされたCソースから呼び出すだけの場合は機能するはずです。

Intel Fortranを使用している場合は、もちろんそれはありません。独自のランタイムライブラリlibifcoreとがありlibifcoremtます。を介して、-lifcore -lifcoremtまたはのifort代わりにを使用してリンクすることによりそれらをリンクする必要がありiccます。しかし、それはあなたがそれらを必要としない可能性が非常に高いです。

最後に、Cライブラリを見つけることは問題ではないはずです。GNU ScientificLibraryをお試しくださいIntelのMKLにもそれらが含まれていると思います。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Cコンパイル済み静的ライブラリをC ++プログラムにリンクする

分類Dev

virtualenvでc ++コンパイル済みライブラリを使用する

分類Dev

Glib2ライブラリに関連するCプログラムコンパイルの問題?

分類Dev

Goコンパイル済みプログラムのスタック保護を無効にする

分類Dev

x86IntelアセンブリプログラムはNASMでのみコンパイルされます

分類Dev

.soまたは.aファイルのみを使用してBoostライブラリに依存するプログラムをコンパイルする

分類Dev

共有ライブラリを使用してLinuxでCプログラムをコンパイルする

分類Dev

参考文献:Cでコンパイルされた静的ライブラリをC ++プログラムにリンクする

分類Dev

SASMIDEでアセンブリプログラムをコンパイルする

分類Dev

Intel c ++コンパイラ:マクロ定義/定義でopenmpプラグマをコンパイルおよびリンクする方法は?

分類Dev

コンパイル済みのGoプログラムで構成ファイルを使用する

分類Dev

HaskellプログラムをCにコンパイルする

分類Dev

Goを使用したコンパイル済みプログラムの逆コンパイル

分類Dev

libpcap ライブラリを使用して OpenWRT 用の C プログラムをクロスコンパイルする方法は?

分類Dev

c標準ライブラリをリンクせずにコンパイラ組み込みを使用する

分類Dev

Chilkatライブラリを使用したC ++プログラムのコンパイル

分類Dev

Chilkatライブラリを使用したC ++プログラムのコンパイル

分類Dev

Chilkat ライブラリを使用した C++ プログラムのコンパイル

分類Dev

.jarライブラリを使用してJavaプログラムをコンパイルする方法

分類Dev

GEOSライブラリを使用してプログラムをコンパイルする方法

分類Dev

Rustの最小コンパイル済みプログラムサイズ

分類Dev

コンパイル済みのアプリケーションをCの別のプログラムに埋め込む

分類Dev

WindowsでCMakeを使用してコンパイル済みのHDF5ライブラリを使用する

分類Dev

アセンブリプログラムのコンパイルエラー

分類Dev

OSXでclisp-2.49を使用してコンパイル済みのlispプログラムを実行する

分類Dev

外部Javaライブラリを使用してコマンドラインでkotlinプログラムをコンパイルおよび実行する方法

分類Dev

Python + setuptools:boost.pythonバインディングを使用してコンパイル済みの共有ライブラリを配布する

分類Dev

Sublime Text 3でFortranをコンパイルするときに、Intel MKLライブラリとリンクしますか?

分類Dev

エラーセレスライブラリサンプルプログラム「helloworld」のコンパイル

Related 関連記事

  1. 1

    Cコンパイル済み静的ライブラリをC ++プログラムにリンクする

  2. 2

    virtualenvでc ++コンパイル済みライブラリを使用する

  3. 3

    Glib2ライブラリに関連するCプログラムコンパイルの問題?

  4. 4

    Goコンパイル済みプログラムのスタック保護を無効にする

  5. 5

    x86IntelアセンブリプログラムはNASMでのみコンパイルされます

  6. 6

    .soまたは.aファイルのみを使用してBoostライブラリに依存するプログラムをコンパイルする

  7. 7

    共有ライブラリを使用してLinuxでCプログラムをコンパイルする

  8. 8

    参考文献:Cでコンパイルされた静的ライブラリをC ++プログラムにリンクする

  9. 9

    SASMIDEでアセンブリプログラムをコンパイルする

  10. 10

    Intel c ++コンパイラ:マクロ定義/定義でopenmpプラグマをコンパイルおよびリンクする方法は?

  11. 11

    コンパイル済みのGoプログラムで構成ファイルを使用する

  12. 12

    HaskellプログラムをCにコンパイルする

  13. 13

    Goを使用したコンパイル済みプログラムの逆コンパイル

  14. 14

    libpcap ライブラリを使用して OpenWRT 用の C プログラムをクロスコンパイルする方法は?

  15. 15

    c標準ライブラリをリンクせずにコンパイラ組み込みを使用する

  16. 16

    Chilkatライブラリを使用したC ++プログラムのコンパイル

  17. 17

    Chilkatライブラリを使用したC ++プログラムのコンパイル

  18. 18

    Chilkat ライブラリを使用した C++ プログラムのコンパイル

  19. 19

    .jarライブラリを使用してJavaプログラムをコンパイルする方法

  20. 20

    GEOSライブラリを使用してプログラムをコンパイルする方法

  21. 21

    Rustの最小コンパイル済みプログラムサイズ

  22. 22

    コンパイル済みのアプリケーションをCの別のプログラムに埋め込む

  23. 23

    WindowsでCMakeを使用してコンパイル済みのHDF5ライブラリを使用する

  24. 24

    アセンブリプログラムのコンパイルエラー

  25. 25

    OSXでclisp-2.49を使用してコンパイル済みのlispプログラムを実行する

  26. 26

    外部Javaライブラリを使用してコマンドラインでkotlinプログラムをコンパイルおよび実行する方法

  27. 27

    Python + setuptools:boost.pythonバインディングを使用してコンパイル済みの共有ライブラリを配布する

  28. 28

    Sublime Text 3でFortranをコンパイルするときに、Intel MKLライブラリとリンクしますか?

  29. 29

    エラーセレスライブラリサンプルプログラム「helloworld」のコンパイル

ホットタグ

アーカイブ