我正在尝试在 Linux 上修改此共享库(带有 .so)扩展名。我正在插入一些 printf 语句和 fprintf 语句来调试,它没有效果。我删除了 .so 文件并意识到程序仍然运行良好。这是否意味着程序已加载到内存中?(但我确信只有我正在测试的程序使用该 .so 文件)
如何让它卸载,以便确保我的程序正在加载修改后的程序?
我正在尝试在 Linux 上修改此共享库(带有 .so)扩展名。我正在插入一些 printf 语句和 fprintf 语句来调试,它没有效果。我删除了 .so 文件并意识到程序仍然运行良好。这是否意味着程序已加载到内存中?(但我确信只有我正在测试的程序使用该 .so 文件)
如何让它卸载,以便确保我的程序正在加载修改后的程序?
不,共享库不会缓存在内存中。如果您已删除该.so
文件并且您的程序仍在运行,则:
.so
同名的,或者.so
如果.so
应该在程序启动时加载,那么您可以使用ldd
来找出您的操作系统认为.so
实际在哪里。
如果.so
在运行时动态加载,那么也许strace
能够帮助查明正在发生的事情。
您可以阅读/proc/1234/maps
以找出进程 1234 的内存映射。这也显示了动态加载的共享对象。
您可以使用LD_LIBRARY_PATH
环境变量来更改共享库的路径并ldconfig
升级其缓存。也看/etc/ld.so.conf
等。
当然,您必须重新启动加载共享库的程序。