Intel の Linux 用 Fortran compiler を FreeBSD で使おうとするとリンクでコケるという件。 Fortran compiler のライブラリ libifcore.a 中に undefined な関数があるのが問題であった。 この関数は for_pause.o の中で使われている IO_putc および IO_getc で、 Linux ではこれが libc 中に存在しているが FreeBSD の libc には存在していないというあたりが原因だろう。
xxxxxxx-afs1{yagi(p5)}1050: nm /usr/compat/linux/lib/libc-2.2.4.so|grep IO_putc 0007511c T _IO_putc xxxxxxx-afs1{yagi(p5)}1051: nm /usr/lib/libc.a |grep IO_putc zsh xxxxxxx-afs1{yagi(p5)}1052: uname -a zsh FreeBSD xxxxxxx-afs1.kek.jp 5.2.1-RELEASE-p1 FreeBSD 5.2.1-RELEASE-p1 #1: Wed Ma r 3 15:52:56 JST 2004 yagi@xxxxxxx-afs1.kek.jp:/usr/obj/home3/src/sys/PIPEO RGAN i386
この for_pause を使わずに済めば link 問題は回避できるのかと中を見てみると 添付のようになっていて pause しなければよい/しようとすると引っかかる?
こんなもんで確かめられるんだが…。 Fortran の pause って何に使うんだっけ?(ばき)
write(*,*) "test" c pause end
send-pr ものかのぅ…
for_pause.o: U _IO_getc U _IO_putc U __errno_location U __stdinp U __stdoutp 000002a6 t bg_paused U fflush U fileno U for__acquire_lun 00000380 d for__asynch_mask U for__release_lun 00000080 d for_diag_rz_msg_table U for_exit 00000000 T for_pause U fprintf U fputs U getpid U getsockopt U isatty 00000060 d lf_units.565 U pause U signal U strncmp
[referer: [an error occurred while processing this directive]]