Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Concurrency fortran 77中带移交字符*(*)的连续字符长度_Concurrency_Fortran_Character_Fortran77_Variable Length - Fatal编程技术网

Concurrency fortran 77中带移交字符*(*)的连续字符长度

Concurrency fortran 77中带移交字符*(*)的连续字符长度,concurrency,fortran,character,fortran77,variable-length,Concurrency,Fortran,Character,Fortran77,Variable Length,我目前正在将一些软件从一个旧的Power Hawk移植到iHawk并发系统。我的fortran编译器是并发cf77。不,我没有切换到gfortran的选项,我需要此编译器的一些编译器标志 在多个*.f文件中,我需要连续字符的长度,我们称之为“字符串”。 在过去,我们有一个公司内部图书馆为我提供一个功能 lstr=lg(str) 此功能现在不再可用。 因此,我试图获取其长度的变量声明如下: integer function number(str, state) implicit none cha

我目前正在将一些软件从一个旧的Power Hawk移植到iHawk并发系统。我的fortran编译器是并发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
/usr/lib/librt.so: undefined reference to  `__pthread_unwind@GLIBC_PRIVATE'
/usr/lib/librt.so: undefined reference to ¸pthread_sigmask@GLIBC2.0'
所以我尝试的是len()方法,而不是lg(),但这给了我编译错误:

file.f: XXX undefined reference to `len_'
所以我认为我没有这么愚蠢,也许是因为不添加下划线的问题,所以对于并发,将其声明为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
是针对32位目标的交叉编译 使用64位编译器的64位计算机上的计算机。具有
-Wl,-rpath link=(…)
我将标志传递给链接器。如果我 只使用:
-L/usr/lib-lc
我得到以下信息:

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
/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()
方法真的能满足我的需要吗?或者你有什么建议吗?

如果你在函数
number
的早期添加
内在len
,会有帮助吗?编译器在一个单独链接的库文件中有自己的运行时库吗?非常感谢@francescalus你能给出答案吗?我没有意识到我必须以这种方式声明len()!通常不必这样做,但它是特定于编译器的。特定于编译器的库是lhF77 lhI77、lhU77、lposix9。我不知道这是否有帮助,但将该方法声明为内在方法就足够了。我需要将librt.a交给链接器,因为cf77链接过程中有一个bug。否则,他无法停止查找64位库,结果一无所获。