有一个旧项目需要在构建过程中重新定义符号。我想启用-flto,但现在似乎无法重新定义符号。
echo "int foo(){return 0;}" > foo.c
clang -c foo.c
llvm-objcopy --redefine-sym foo=bar foo.o
file foo.o
#> foo.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
clang -flto -c foo.c
llvm-objcopy --redefine-sym foo=bar foo.o
#> llvm-objcopy: error: 'foo.o': The file was not recognized as a valid object file
file foo.o
#> foo.o: LLVM IR bitcode
或者,我可以通过其他方式解决问题吗?我需要的是
clang -o abc abc.c foo.o
但让 abc.c
中的函数调用解决以纠正 foo.o
中的函数。
环境信息:
root@codespaces-251304:/bind# clang --version
Ubuntu clang version 19.1.0 (++20240815083225+4d4a4100f68d-1~exp1~20240815083357.22)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-19/bin
root@codespaces-251304:/bind# llvm-objcopy --version
llvm-objcopy, compatible with GNU objcopy
Ubuntu LLVM version 19.1.0
Optimized build.
llvm-dls
和 llvm-as
.
rename_function(){
llvm-dis $3 -o - | sed -e "s|name: \"$1\"|name: \"$2\"|" -e "s|@$1(|@$2(|" | llvm-as -o $3.m.o
mv $3.m.o $3
}
rename_function bar foo foo.o