一个正在运行的基于C++的进程是否可以使用
正在运行的进程轮询新版本的动态库(具有相同的API)。 一旦检测到这样的文件,将执行以下一系列操作:
然而,似乎我的程序在第三阶段意外崩溃了。 是否可能
顺便说一下,在Windows上,使用
dlopen
重新加载基于C++的动态库?正在运行的进程轮询新版本的动态库(具有相同的API)。 一旦检测到这样的文件,将执行以下一系列操作:
- 使用
dlclose
卸载旧库。 - 复制新的dylib并覆盖旧版本的文件。
- 使用
dlopen
从该位置加载更新的版本。 - 根据新加载的库中的
dlsym
设置函数指针变量。
然而,似乎我的程序在第三阶段意外崩溃了。 是否可能
dlclose
部分在进程虚拟空间中留下旧库的残留物? 有更好的方法吗?顺便说一下,在Windows上,使用
LoadLibrary,FreeLibrary和GetProcAddress
而不是dlopen,dlclose和dlsym
可以正常工作。
dlsym
获取的函数和对象。 - Quentindlsym
获取我需要的API(请参见更新的问题),难道链接器不会混淆具有相同名称的旧符号吗? - Zohar81