Concurrency fortran 77中带移交字符*(*)的连续字符长度
我目前正在将一些软件从一个旧的Power Hawk移植到iHawk并发系统。我的fortran编译器是并发cf77。不,我没有切换到gfortran的选项,我需要此编译器的一些编译器标志 在多个*.f文件中,我需要连续字符的长度,我们称之为“字符串”。 在过去,我们有一个公司内部图书馆为我提供一个功能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
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位库,结果一无所获。