我尝试更改共享库中的特定字符串,并在运行与之链接的程序后,出现此错误:
./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
理论上,这个应该可以工作,因为在使用该库的所有文件和整个库中都会更改此字符串。
那么这里可能出现什么问题呢? 如何修复或调试此问题?
答案 0 :(得分:2)
sed -i“s / have_somewq / have_qwerty / g”./ libprog.so
您是否尝试使用sed更改二进制文件中的符号名称?这不会起作用。一个原因是除了符号名称之外,共享库还在专用部分中包含它们的哈希值,如果不费力,您将无法修改它们。
另请注意,该符号具有PROG_PRIVATE版本,可能意味着它不应在库外使用。