我尝试更改共享库中的特定字符串,在运行与其链接的程序后,出现此错误:
./prog: symbol lookup error: /home/user/lib/libprog.so: undefined symbol: have_qwerty, version PROG_PRIVATE
更改字符串的命令是:
sed -i "s/have_somewq/have_qwerty/g" ./libprog.so
理论上,无论如何,这个应该起作用,因为这个字符串在使用这个库的所有文件和整个库中都发生了变化。
那么这里可能出现什么问题?
如何修复或调试此问题?
最佳答案
sed -i "s/have_somewq/have_qwerty/g" ./libprog.so
您是否尝试使用 sed 更改二进制文件中的符号名称?这是行不通的。原因之一是,除了符号名称之外,共享库还在专用部分中包含其哈希值,您将无法在不付出大量努力的情况下对其进行修改。
另请注意,该符号具有 PROG_PRIVATE 版本,这可能意味着它不适合在库外部使用。
关于c - 替换字符串后符号查找错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40786327/