replacestring后出现符号查找错误

我试图改变一个共享库中的特定string,并运行与之链接的程序后,我得到这个错误:

./prog: symbol lookup error: /home/user/lib/libprog.so: undefined symbol: have_qwerty, version PROG_PRIVATE 

改变string的命令是:

 sed -i "s/have_somewq/have_qwerty/g" ./libprog.so 

理论上,这应该工作不pipe,因为这个string在使用这个库的所有文件和整个库中都被改变了。

那么这里有什么问题呢?
我该如何解决或debugging这个问题?

sed -i“s / have_somewq / have_qwerty / g”./libprog.so

你想使用sed在二进制文件中更改符号名称吗? 这是不行的。 一个原因是,除了符号名称之外,共享库还在专用的部分中包含了他们的哈希值,如果不费很大的努力就不能修改。

还要注意,符号具有PROG_PRIVATE版本,这可能意味着它并不意味着在库之外使用。