Длина непрерывных символов в фортране 77 с передаваемым символом * (*) - PullRequest
0 голосов
/ 24 мая 2018

В настоящее время я портирую некоторое программное обеспечение со старого Power Hawk на систему iHawk Concurrent.Мой компилятор фортранов - Concurrent cf77.Нет, у меня нет возможности переключиться на gfortran, мне нужны некоторые флаги компилятора этого компилятора.

В нескольких файлах * .f мне нужна длина непрерывных символов, давайте назовем их «строками».В прошлом у нас была внутренняя библиотека компании, предоставляющая мне функцию lstr = lg(str) Эта функция больше не доступна.Итак, переменные, которые я пытаюсь получить, объявляются следующим образом:

integer function number(str, state)
implicit none

character str*(*)
integer*1 z/ '30'x /
integer*2 j,i

j = lg(str) 
do i=1 , j
  num = ichar( str(i:i) ) - z
  if(num.lt.0) then
    state = 1
    return
  end if
end do
state= 0
return
end

Итак, я попробовал этот метод len () вместо lg (), но это дает мне ошибку компиляции:

file.f: XXX undefined reference to `len_'

Так что я подумал, что я не такой глупый, возможно, это проблема не добавлять подчеркивание, поэтому для Concurrent достаточно объявить его как CEXTERNAL:

CEXTERNAL len

Ха-ха, нетсупер не умный разработчик теперь имеет следующую ошибку:

file.f: XXX undefined reference to `len'

В настоящее время я компилирую / связываю со следующими флагами:

cf77 -g --cpu=pentium -c -Nt5000 -lpthread $@
cf77 -g --cpu=pentium -o -Wl,-rpath-link=/usr/lib,-lc,/usr/lib/librt.a $@

Комментарий: --cpu=pentium is crossкомпиляция для 32-битной целевой машины на 64-битной машине с 64-битным компилятором.с -Wl,-rpath-link= (...) я передаю флаги компоновщику.Если я пропущу это, используя только: -L/usr/lib -lc, я получу следующее:

/usr/lib/librt.so: undefined reference to  `__pthread_unwind@GLIBC_PRIVATE'
/usr/lib/librt.so: undefined reference to ¸pthread_sigmask@GLIBC2.0'

и т. Д.их куча.Добавление librt.a приводит к тому же.Работает только с ключом -Wl, -rpath-link = arg, arg, arg.

Возможно, мне просто не хватает нужной библиотеки?Этот метод len() действительно делает то, для чего он мне нужен, или у вас есть предложения?

...