我正在尝试在Linux上修改此共享库(带.so)扩展名。我正在插入一些printf语句和fprintf语句进行调试,它没有任何效果。我删除了.so文件并意识到该程序仍然正常运行。这是否意味着程序被加载到内存中? (但我确定只有我正在测试的程序才使用.so文件)
如何让它卸载以便我可以确保我的程序正在加载修改后的程序?
答案 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
等。
当然,您必须重新启动加载共享库的程序。