从内存中卸载共享库

时间:2012-07-23 03:46:24

标签: linux shared-libraries

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

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

2 个答案:

答案 0 :(得分:5)

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

  • 程序正在从其他位置加载.so同名,或
  • 程序可以在不加载.so
  • 的情况下运行

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

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

答案 1 :(得分:2)

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

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

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