Nil*_*nck 13 c linux windows dll
对于测试,我想从应用程序加载两个共享库实例.库中的代码提供了API,但它不允许我初始化库的两个(或更多)实例,因为某些函数依赖于静态变量.
我正在为这个lib编写单元测试,我想有两个实例,因为这会简化我的测试.
该库未链接到该程序.相反,我使用LoadLibrary/GetProcAddress(或Linux上的dlopen/dlsym)直接加载它.为了区分这两个库,我可以简单地为我正在加载的函数指针使用不同的名称...
以下是问题:
是否可以加载这样的库两次?例如,库的所有已加载实例应该获得自己的数据段,并且不会相互影响.
如果是这样:这对于Windows和Linux来说是否可移植?
理论上,如果它被编译为与位置无关的代码(-fPIC),则可以加载两次库.
在某些Unices上,dlopen如果你的加载器有一个RTLD_PRIVATE标志,你可以使用两次库,或者使用相同符号的库的两个"不同"副本(将它放在两个不同的路径上,否则它将只返回第一个文件句柄) ,并打开它们RTLD_LOCAL.
我对Windows共享库一无所知.它甚至可能是不可能的.
| 归档时间: |
|
| 查看次数: |
5993 次 |
| 最近记录: |