加载共享库的两个实例
为了进行测试,我想从应用程序加载共享库的两个实例。库中的代码提供了API,但由于某些功能依赖于静态变量,因此它不允许我初始化库的两个(或多个)实例。
我目前正在为此lib编写单元测试,并且我想拥有两个实例,因为这将大大简化我的测试。
该库未链接到该程序。相反,我直接使用LoadLibrary / GetProcAddress(或linux上的dlopen /
dlsym)加载它。为了区分这两个库,我可以为要加载的功能指针使用不同的名称…
这里是问题:
是否可以两次加载这样的库?例如,该库的所有加载实例都应获得自己的数据段,并且不会相互影响。
如果是这样:Windows和Linux是否可移植?
回答:
从理论上讲,如果将库编译为与位置无关的代码(-fPIC
),则可以加载两次。
在某些Unices上,dlopen
如果加载程序有一个RTLD_PRIVATE
标志,或者通过具有相同符号的两个“不同”库副本(将其放在两个不同的路径上,则它可以返回第一个文件句柄),然后可以对该库执行两次操作,并使用打开它们RTLD_LOCAL
。
我对Windows共享库一无所知。甚至不可能。
以上是 加载共享库的两个实例 的全部内容, 来源链接: utcz.com/qa/397399.html