gpt4 book ai didi

c++ - 通过链接实现静态或全局的多个实例

转载 作者:行者123 更新时间:2023-11-27 23:54:21 27 4
gpt4 key购买 nike

我遇到过一些依赖代码是静态库的情况。

我们称它为静态库“A”。我制作了一个 dll“B”,它链接到“A”。可执行文件“C”链接到两者。

I think this diagram is correct:

A static lib
/ \
| B dll
\ \
\---C executable

“A”包含一个使用全局变量的记录器类。这是你公司交给你的其中一个,你看着它,然后对自己说,“哦,他妈的,真是一团糟。”

看起来“A”中的那些全局变量具有不同的地址,这取决于我是单步执行可执行模块中的代码还是单步执行 dll 模块中的代码。

当然,这会使记录器以意想不到的方式运行。

我假设静态库被复制一次到 dll 中,一次复制到可执行文件中,因此实际上有 2 个所有静态和全局的拷贝。对吗?

问题的第二部分是,让这个记录器成为 Meyer 的单例是否可以解决问题,或者方法范围内的静态是否也有不同的地址,具体取决于我从哪个模块调用?

或者,如果一个项目是动态链接的,那么让所有 50 个项目都动态链接是正确的做法吗?

最佳答案

记录的每个可执行文件当前必须已链接到静态库中。请注意,DLL 在这里被视为可执行文件。

因此,您的 DLL 和 EXE 都有自己的静态库拷贝,以及自己的变量等等。您唯一真正的办法是将日志记录从静态库移动到 DLL,或者使多个实例以有用且预期的方式同时进行日志记录。

关于c++ - 通过链接实现静态或全局的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43788009/

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