0

我正在使用 ifort,当我尝试使用编译器选项编译我的程序时出现链接错误。尽管如此,我已经在一个非常小的简单程序上测试了这些选项,但我遇到了同样的问题。

因此,我怀疑这与 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.
4

1 回答 1

5

看起来很像您缺少用于命名编译器发出的可执行文件的命令行选项。我想你实际上想要这样的东西(注意-o选项):

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

您看到的错误可能是因为您告诉编译器尝试通过编译testrealprint.f90然后将其与现有可执行文件 testrealprint.out链接来创建可执行文件。这就是您从链接器收到重复符号错误的原因 - 您正在尝试将现有应用程序链接到当前链接器调用。我有点惊讶,testrealprint.out在搜索路径中不存在的情况下尝试编译时没有找到文件未找到错误....

于 2012-04-09T14:43:09.287 回答