gpt4 book ai didi

c - 加载共享库的两个实例

转载 作者:IT王子 更新时间:2023-10-29 00:27:40 26 4
gpt4 key购买 nike

为了进行测试,我想从应用程序加载共享库的两个实例。库中的代码提供了一个 API,但它不允许我初始化库的两个(或更多)实例,因为某些函数依赖于静态变量..

我目前正在为此库编写单元测试,我希望有两个实例,因为这会大大简化我的测试。

库没有链接到程序中。相反,我使用 LoadLibrary/GetProcAddress(或 Linux 上的 dlopen/dlsym)直接加载它。为了区分这两个库,我可以简单地为我正在加载的函数指针使用不同的名称......

问题如下:

  • 是否可以加载这样的库两次?例如。所有加载的库实例都应该有自己的数据段,并且不会相互影响。

  • 如果是这样:这是否适用于 windows 和 linux?

最佳答案

理论上,如果库被编译为位置无关代码 (-fPIC),您可以加载库两次。

在一些 Unice 上,如果你的加载器有一个 RTLD_PRIVATE 标志,你可以 dlopen 库两次,或者通过具有相同的库的两个“不同”副本符号(把它放在两个不同的路径,否则它只会返回第一个文件句柄),然后用 RTLD_LOCAL 打开它们。

我对 Windows 共享库一无所知。这甚至可能是不可能的。

关于c - 加载共享库的两个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com