MiH*_*MiH 2 c ubuntu shared-libraries
我试图在 C 中加载一个共享库两次:
lib1 = dlopen("mylib.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
lib2 = dlopen("mylib.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
Run Code Online (Sandbox Code Playgroud)
我想要的是 lib1 和 lib2 具有单独的地址空间,以便它们可以做不同的事情。目前,我可以实现这一点的唯一方法是复制 mylib 使代码如下所示:
lib1 = dlopen("mylib.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
lib2 = dlopen("mylib2.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
Run Code Online (Sandbox Code Playgroud)
在有限的范围内,这对我来说很好用。但是,我有一个应用程序,它使用库的次数一般,这使得复制库很麻烦。
每次加载库时,有没有更好的方法来拥有单独的地址空间?
编辑:
我想多次加载库,因为我的应用程序正在处理一种消息队列。消息队列中的项引用共享库(例如 mylib)的名称,并包含一组应由库处理的数据。我想在多线程环境中处理 MQ,在自己的线程中运行对库方法的每次调用。只要 MQ 只包含一次对库的调用,一切都会按预期进行。但是,当我有两个项目使用同一个库时,事情开始变得奇怪。
您需要使用dlmopen来实现这种隔离:
// No need for RTLD_LOCAL, not sure about RTLD_DEEPBIND
lib1 = dlmopen (LM_ID_NEWLM, "mylib.so", RTLD_LAZY | RTLD_DEEPBIND);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2541 次 |
| 最近记录: |