5

我正在尝试在 Linux 上修改此共享库(带有 .so)扩展名。我正在插入一些 printf 语句和 fprintf 语句来调试,它没有效果。我删除了 .so 文件并意识到程序仍然运行良好。这是否意味着程序已加载到内存中?(但我确信只有我正在测试的程序使用该 .so 文件)

如何让它卸载,以便确保我的程序正在加载修改后的程序?

4

2 回答 2

10

不,共享库不会缓存在内存中。如果您已删除该.so文件并且您的程序仍在运行,则:

  • 程序正在从不同的位置加载.so同名的,或者
  • 程序无需加载即可运行.so

如果.so应该在程序启动时加载,那么您可以使用ldd来找出您的操作系统认为.so实际在哪里。

如果.so在运行时动态加载,那么也许strace能够帮助查明正在发生的事情。

于 2012-07-23T03:57:21.663 回答
4

您可以阅读/proc/1234/maps以找出进程 1234 的内存映射。这也显示了动态加载的共享对象。

您可以使用LD_LIBRARY_PATH环境变量来更改共享库的路径并ldconfig升级其缓存。也看/etc/ld.so.conf等。

当然,您必须重新启动加载共享库的程序。

于 2012-07-23T06:06:18.430 回答