gfortran-5.2.0 -m32 -dynamiclib -o -shared создает странные файлы

У меня есть небольшой код на фортране в tmp0.f

      subroutine POWERTWO (n, nsquared)
            integer, intent(in) :: n
        integer, intent(out) :: nsquared
            nsquared = n*n
            return
      end subroutine POWERTWO

которую я компилирую в динамическую библиотеку с помощью:

gfortran-5.2.0 -m32 -dynamiclib ./tmp0.f -o ./tmp0.so -shared

где мой gfortran был собран с помощью gcc 5.2.0 и настроен следующим образом:

Using built-in specs.
COLLECT_GCC=gfortran-5.2.0
COLLECT_LTO_WRAPPER=/usr/local/lvm/gcc-5.2.0/libexec/gcc/x86_64-unknown-linux-gnu/5.2.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/usr/local/lvm/gcc-5.2.0 --enable-checking=release --with-gmp=/usr/local/lvm/gmp-6.0.0 --with-mpfr=/usr/local/lvm/mpfr-3.1.2 --with-mpc=/usr/local/lvm/mpc-1.0.3 --enable-languages=c,c++,fortran,objc,obj-c++ --with-isl=/usr/local/lvm/isl-0.14 --with-cloog=/usr/local/lvm/cloog-0.18.4 --program-suffix=-5.2.0
Thread model: posix
gcc version 5.2.0 (GCC)

В OS X 10.10.5 компиляция произвела (без предупреждения) требуемую динамическую библиотеку tmp0.dylib, но в Ubuntu (15-05) я получил следующие предупреждения:

f951: Warning: unrecognized gcc debugging option: y
f951: Warning: unrecognized gcc debugging option: n
f951: Warning: unrecognized gcc debugging option: m
f951: Warning: unrecognized gcc debugging option: i
f951: Warning: unrecognized gcc debugging option: c
f951: Warning: unrecognized gcc debugging option: l
f951: Warning: unrecognized gcc debugging option: i
f951: Warning: unrecognized gcc debugging option: b

и компиляция выдала помимо динамической библиотеки tmp0.so еще кучу файлов:

-rw-rw-r-- 1 XXX XXX  4679 août  25 19:12 tmp0.f.192r.expand
-rw-rw-r-- 1 XXX XXX  1601 août  25 19:12 tmp0.f.193r.vregs
-rw-rw-r-- 1 XXX XXX  1602 août  25 19:12 tmp0.f.194r.into_cfglayout
-rw-rw-r-- 1 XXX XXX  3398 août  25 19:12 tmp0.f.195r.jump
-rw-rw-r-- 1 XXX XXX  1570 août  25 19:12 tmp0.f.207r.reginfo
-rw-rw-r-- 1 XXX XXX  1634 août  25 19:12 tmp0.f.225r.outof_cfglayout
-rw-rw-r-- 1 XXX XXX  1601 août  25 19:12 tmp0.f.226r.split1
-rw-rw-r-- 1 XXX XXX  2980 août  25 19:12 tmp0.f.228r.dfinit
-rw-rw-r-- 1 XXX XXX  3062 août  25 19:12 tmp0.f.229r.mode_sw
-rw-rw-r-- 1 XXX XXX  2980 août  25 19:12 tmp0.f.230r.asmcons
-rw-rw-r-- 1 XXX XXX  6631 août  25 19:12 tmp0.f.234r.ira
-rw-rw-r-- 1 XXX XXX  5581 août  25 19:12 tmp0.f.235r.reload
-rw-rw-r-- 1 XXX XXX  3299 août  25 19:12 tmp0.f.238r.split2
-rw-rw-r-- 1 XXX XXX  4347 août  25 19:12 tmp0.f.242r.pro_and_epilogue
-rw-rw-r-- 1 XXX XXX  3957 août  25 19:12 tmp0.f.245r.jump2
-rw-rw-r-- 1 XXX XXX  4007 août  25 19:12 tmp0.f.258r.stack
-rw-rw-r-- 1 XXX XXX  3925 août  25 19:12 tmp0.f.259r.alignments
-rw-rw-r-- 1 XXX XXX  3513 août  25 19:12 tmp0.f.261r.mach
-rw-rw-r-- 1 XXX XXX  3513 août  25 19:12 tmp0.f.262r.barriers
-rw-rw-r-- 1 XXX XXX  3578 août  25 19:12 tmp0.f.266r.shorten
-rw-rw-r-- 1 XXX XXX  3578 août  25 19:12 tmp0.f.267r.nothrow
-rw-rw-r-- 1 XXX XXX  4216 août  25 19:12 tmp0.f.268r.dwarf2
-rw-rw-r-- 1 XXX XXX  3578 août  25 19:12 tmp0.f.269r.final
-rw-rw-r-- 1 XXX XXX  2387 août  25 19:12 tmp0.f.270r.dfinish

Что это за файлы, и могу ли я избежать их создания с помощью какой-нибудь приятной опции, переданной gfortran ?


person Olorin    schedule 25.08.2015    source источник


Ответы (1)


Динамические библиотеки (.dylib) предназначены для вашего Mac. В Linux мы используем разделяемые библиотеки (.so), и ваша команда компиляции должна опустить -dynamiclib, который, согласно вашему предупреждению, не был понят. Я бы также отказался от -m32, если у вас нет особой потребности в 32-битном коде.

gfortran-5.2.0 -fPIC -shared ./tmp0.f -o ./tmp0.so

Построит вашу библиотеку правильно. Если вы сохраните его в своем каталоге сборки, вам также потребуется разрешить динамическому компоновщику там, где он находится, либо с помощью переменной среды LD_LIBRARY_PATH, либо с помощью параметра компоновщика -rpath для возможного двоичного файла, на который вы ссылаетесь, для кодирования пути к библиотеке в исполняемый файл.

Этот беспорядок файлов, с которым вы столкнулись, - это интерпретация -dynamic от gcc. Он интерпретировал это как -da (и предупредил вас о непонимании остального). Параметр -d заставляет GCC выдавать отладочные дампы во время компиляции, а a говорит выдавать все из них. Вы можете удалить их все, и они не будут выводиться с помощью командной строки, указанной выше.

person casey    schedule 25.08.2015