首页 > 解决方案 > 为 `.o` 文件中的所有文本代码符号添加前缀

问题描述

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

ld -r obj1.o obj2.o ... objn.o -o static1.o
objcopy --localize-hidden --prefix-symbols=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'

看来我只想重命名标记为 的T符号nm。这个对吗?有没有办法用objcopyor做到这一点ld

您是否还知道适用于 Mac 的解决方案(在哪里objcopy不可用)?

标签: linkerfortranstatic-librariesffi

解决方案


推荐阅读