2012-04-09 8 views
0

コンパイルオプションでプログラムをコンパイルしようとすると、ifortを使用してリンクエラーが発生します。それにもかかわらず、私は同じ問題を抱える非常に小さな単純なプログラムでこれらのオプションをテストしました。ifortのlinuxボックスのコンパイラオプション

私は、ifortがインストールされている方法や、使用しているシステムの種類と関係がありますが、わかりません。これらのプログラムはオプションなしでコンパイルされたときにコンパイルされます。私の質問は、私が間違っているのは、コンパイラオプションやコンパイラオプションを使用している間にこれらのエラーが発生しないようにする方法です。ここ

は、プログラムが定期的にコンパイルされている方法です。ここ

ifort -free testrealprint.out testrealprint.f90 

は、プログラムがオプションでコンパイルされている方法です。ここ

ifort -free -O2 -stand f03 -check all -traceback -warn all -fstack-protector - assume protect_parens -implicitnone testrealprint.out testrealprint.f90 

は、私がテストするために使用しています非常に簡単なコードですコンパイラオプション:

program main 

implicit none 

real, dimension(1:3) :: adremvect 
integer :: j 
character (LEN = 7) :: adremchar, adremcharadj,adremcharadjtrm, adremcharnew 
adremvect = (/ 2.0, 1.3, 1.0 /) 
    do j = 1, 3 
     write(adremchar, '(f5.1)') adremvect(j) 
     adremcharadj = adjustl(adremchar) 
     adremcharadjtrm = trim(adremcharadj) 
     adremcharnew = adremchar(4:) 
      print *, adremvect(j), adremcharadj, adremcharadjtrm, adremcharnew 
end do 

ここでは、私が使用するときに受け取るエラーメッセージの一部ですコンパイラオプション:

testrealprint.out: In function `_start': 
(.text+0x0): multiple definition of `_start' 
/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib64/crt1.o:(.text+0x0): first  defined here 
    testrealprint.out: In function `_fini': 
    (.fini+0x0): multiple definition of `_fini' 
    /usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib64/crti.o:(.fini+0x0): first  defined here 
    testrealprint.out:(.rodata+0x0): multiple definition of `_IO_stdin_used' 
    /usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib64/crt1.o: (.rodata.cst4+0x0): first defined here 
     testrealprint.out: In function `__data_start': 
    (.data+0x0): multiple definition of `__data_start' 
    ld: error in testrealprint.out(.eh_frame); no .eh_frame_hdr table will be created. 
+0

最終実行ファイル名を 'testrealprint.out '? – talonmies

+0

はい、私はそうしようとしています。 –

答えて

5

コンパイラが発行する実行可能ファイルの名前を付けるコマンドラインオプションがないようです。あなたがtestrealprint.f90をコンパイルして実行ファイルを作ってみるようにコンパイラを語った後、でそれをリンクしているので、あなたが見ているエラーがおそらくある

ifort -free -O2 -stand f03 -check all -traceback -warn all -fstack-protector -assume protect_parens -implicitnone -o testrealprint.out testrealprint.f90 

:私はあなたが実際にこの(-oオプションに注意してください)のような何かをしたいと推定します既存の実行可能ファイルtestrealprint.out。このため、既存のアプリケーションを現在のリンカー呼び出しにリンクしようとしている、リンカーから重複したシンボルエラーが発生しています。私は検索パスに既存のtestrealprint.outなしでコンパイルしようとしたときに、ファイルが見つかりませんでしたというエラーに驚いています....

+0

はい、それはそうするようです。ファイルが見つからないというエラーが出る理由は、私のディレクトリにあるデフォルトバージョンのテストバージョンがすでにあるためです。だからあなたの答えはそれを考えると完璧な意味を持っています。 –

+1

@ジャルダンゴールド:もしこの答えがあなたの問題を解決すれば、おそらくあなたは[それを受け入れる]ように親切だろう(http://meta.stackexchange.com/q/5234/163653)? – talonmies

関連する問題