我正在尝试在C语言中两次加载共享库:
我希望lib1和lib2拥有独立的地址空间,以便它们可以执行不同的任务。目前,我唯一能做到这一点的方法是复制mylib,使代码看起来像这样:
在有限的范围内,这对我来说很好用。然而,我的应用程序需要通常使用该库,这使得复制库变得麻烦。
有没有更好的方法为每次加载库创建一个单独的地址空间?
编辑:
我希望多次加载库,因为我的应用程序正在处理某种消息队列。消息队列中的项目引用一个共享库的名称(例如mylib),并包含一组将由库处理的数据。我想在多线程环境下处理MQ,运行每个调用库方法的线程。
只要MQ仅包含对库的一次调用,一切都按预期工作。但是,当我有两个使用相同库的项目时,事情开始变得奇怪。
lib1 = dlopen("mylib.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
lib2 = dlopen("mylib.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
我希望lib1和lib2拥有独立的地址空间,以便它们可以执行不同的任务。目前,我唯一能做到这一点的方法是复制mylib,使代码看起来像这样:
lib1 = dlopen("mylib.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
lib2 = dlopen("mylib2.so", RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND);
在有限的范围内,这对我来说很好用。然而,我的应用程序需要通常使用该库,这使得复制库变得麻烦。
有没有更好的方法为每次加载库创建一个单独的地址空间?
编辑:
我希望多次加载库,因为我的应用程序正在处理某种消息队列。消息队列中的项目引用一个共享库的名称(例如mylib),并包含一组将由库处理的数据。我想在多线程环境下处理MQ,运行每个调用库方法的线程。
只要MQ仅包含对库的一次调用,一切都按预期工作。但是,当我有两个使用相同库的项目时,事情开始变得奇怪。
dlopen
同一个库。这听起来像是一些XY问题。 - Basile Starynkevitch