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
Linker 在“.o”文件中为所有文本代码符号加前缀_Linker_Fortran_Static Libraries_Ffi - Fatal编程技术网

Linker 在“.o”文件中为所有文本代码符号加前缀

Linker 在“.o”文件中为所有文本代码符号加前缀,linker,fortran,static-libraries,ffi,Linker,Fortran,Static Libraries,Ffi,我有多个Fortran静态库,它们有相同名称的函数,我想从Rust调用这些函数。使用objcopy前缀,我可以使名称唯一,如图所示: ld-r obj1.o obj2.o。。。objn.o-ostatic1.o objcopy--本地化隐藏--前缀符号=foo static1.o static2.o ar-rcs mylib.a static2.o 然而,objcopy似乎是所有符号的前缀,甚至是那些只作为对外部库的函数调用出现的符号。因此,我会出现如下错误: /usr/bin/ld: (.t

我有多个Fortran静态库,它们有相同名称的函数,我想从Rust调用这些函数。使用
objcopy
前缀,我可以使名称唯一,如图所示:

ld-r obj1.o obj2.o。。。objn.o-ostatic1.o
objcopy--本地化隐藏--前缀符号=foo static1.o static2.o
ar-rcs mylib.a static2.o
然而,
objcopy
似乎是所有符号的前缀,甚至是那些只作为对外部库的函数调用出现的符号。因此,我会出现如下错误:

/usr/bin/ld: (.text+0xaf0c): undefined reference to `foo_gfortran_runtime_error_at'
似乎我只想重命名
nm
中标记为
T
的符号。这是正确的吗?有没有办法用
objcopy
ld
实现这一点


您还知道在Mac上也可以使用的解决方案吗(其中,
objcopy
不可用)?

使用唯一名称将每个静态库的代码封装到模块中会更容易。Fortran编译器通常会损坏模块中实体的名称。例如,我的高斯消去例程封装在名为gaussm的模块中,双精度函数gauss_dble在库中具有名称uu gaussm_MOD_gauss_dble。将每个静态库的代码封装在具有唯一名称的模块中会更容易。Fortran编译器通常会损坏模块中实体的名称。例如,我的高斯消去例程封装在名为gaussm的模块中,双精度函数gauss_dble在库中的名称为u_gaussm_MOD_gauss_dble。