|
|

楼主 |
发表于 2005-8-30 14:38:48
|
显示全部楼层
Post by rickxbx
虽然你用 list 看到的代码变了,但是你有没有发现运行结果并没有变吗?
list 是去读那个源文件,然后列出你需要的行,并没有载入程序.程序每次 run 会被载入一次,
确实像你说的那样。
我又用一个链接了共享库的可执行文件test来试。编译的过程:
gcc -c test.c -g
gcc -o test test.o -L. -lmyso -g
共享库的编译:
gcc -fPIC -c libmyso.c -g
gcc -shared -Wl,-soname,libmyso.so -o libmyso.so.1.0.0 libmyso.o -lc -g
ln -s libmyso.so.1.0.0 libmyso.so
调试:
gdb test
(gdb) break 15 //这一行有共享库的一个接口
(gdb) run
此时在外部将libmyso从编译。
(gdb) next
发现结果仍然按旧的共享库运行。共享库要在运行期才调用,比如我只修改共享库后编译它,不动test,但test运行时就已经用的是修改后的共享库。不过好像gdb调试的时,它载入程序就把代码(ELF二进制?)一起载入了,所以共享库的更新反映不出来。 |
|