FreeBSD-8.3 gfortran46 で c と fortran のプログラムを混在させる
とき、gfortran で -fPIC オプションを使うと __i686.get_pc_thunk.bx
が多重定義になるようです。例えば、下記の例で簡単に再現できます。

-- c.c --
main()
{
  fsub_();
}
-- f.f --
      subroutine fsub()

      write(6,*) 'fsub()'
      return
      end
-- makefile --
c: c.o f.o
        cc -L/usr/local/lib/gcc46 -o c c.o f.o -lgfortran
c.o: c.c
        cc -c -fPIC c.c
f.o: f.f
        gfortran -c -fPIC f.f
clean:
        rm -f *.o c
--

fortran プログラムで -fPIC を避けるか

  gfortran -o c c.o f.o -lc

でリンクすれば回避できるようです。

FreeBSD-8.2 の gfortran45 では、この問題がありません。

平林 浩一

メールによる返信