1. <i id='Hg792'><tr id='Hg792'><dt id='Hg792'><q id='Hg792'><span id='Hg792'><b id='Hg792'><form id='Hg792'><ins id='Hg792'></ins><ul id='Hg792'></ul><sub id='Hg792'></sub></form><legend id='Hg792'></legend><bdo id='Hg792'><pre id='Hg792'><center id='Hg792'></center></pre></bdo></b><th id='Hg792'></th></span></q></dt></tr></i><div id='Hg792'><tfoot id='Hg792'></tfoot><dl id='Hg792'><fieldset id='Hg792'></fieldset></dl></div>

      <legend id='Hg792'><style id='Hg792'><dir id='Hg792'><q id='Hg792'></q></dir></style></legend>
    2. <small id='Hg792'></small><noframes id='Hg792'>

        <bdo id='Hg792'></bdo><ul id='Hg792'></ul>
      <tfoot id='Hg792'></tfoot>

        C++静态库中的共享全局变量

        时间:2023-10-06

          <tfoot id='faU3l'></tfoot>

            <small id='faU3l'></small><noframes id='faU3l'>

          1. <i id='faU3l'><tr id='faU3l'><dt id='faU3l'><q id='faU3l'><span id='faU3l'><b id='faU3l'><form id='faU3l'><ins id='faU3l'></ins><ul id='faU3l'></ul><sub id='faU3l'></sub></form><legend id='faU3l'></legend><bdo id='faU3l'><pre id='faU3l'><center id='faU3l'></center></pre></bdo></b><th id='faU3l'></th></span></q></dt></tr></i><div id='faU3l'><tfoot id='faU3l'></tfoot><dl id='faU3l'><fieldset id='faU3l'></fieldset></dl></div>
              <tbody id='faU3l'></tbody>
            • <legend id='faU3l'><style id='faU3l'><dir id='faU3l'><q id='faU3l'></q></dir></style></legend>
                  <bdo id='faU3l'></bdo><ul id='faU3l'></ul>
                • 本文介绍了C++静态库中的共享全局变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我有一个 MS C++ 项目(我们称之为项目 A),我目前正在将它编译为静态库 (.lib).它定义了一个全局变量 foo.我还有另外两个单独编译的项目(分别称为 B 和 C),每个项目都将共享静态库 A 链接到其中. B 和 C 都是最终在同一进程中加载​​的 dll.我想在同一进程中在 B 和 C 之间共享来自 A 的 foo 的单个实例:单例.我不知道如何在这里用项目 A 完成单例模式,因为它是分别静态编译到 B 和 C 中的.如果我在 B 和 C 中都将 foo 声明为 extern,我最终会在 B 和 C 中得到不同的实例.使用带有静态 getInstance 方法的标准、简单的单例类模式会导致两个静态 foo 实例化.

                  I have a MS C++ project (let's call it project A) that I am currently compiling as a static library (.lib). It defines a global variable foo. I have two other projects which compile separately (call them B and C, respectively) and each links the shared static library A in. Both B and C are dll's that end up loaded in the same process. I would like to share a single instance of foo from A between B and C in the same process: a singleton. I'm not sure how to accomplish the singleton pattern here with project A since it is statically compiled into B and C separately. If I declare foo as extern in both B and C, I end up with different instances in B and C. Using a standard, simple singleton class pattern with a static getInstance method results in two static foo instantiations.

                  当项目 A 被静态编译成 B 和 C 时,有什么办法可以做到这一点?还是必须将 A 设为 DLL?

                  Is there any way to accomplish this while project A is statically compiled into B and C? Or do I have to make A a DLL?

                  推荐答案

                  是的,您必须将 A 设为共享 DLL,否则将其定义为 B 和 C 中的 extern 并静态链接所有三个.

                  Yes, you have to make A a shared DLL, or else define it as extern in B and C and link all three statically.

                  这篇关于C++静态库中的共享全局变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何在 C++ 中使用带有 LoadLibrary 的 COM DLL 下一篇:C++ 中的固定宽度整数

                  相关文章

                  最新文章

                  <small id='3FPS2'></small><noframes id='3FPS2'>

                  1. <legend id='3FPS2'><style id='3FPS2'><dir id='3FPS2'><q id='3FPS2'></q></dir></style></legend>
                    <i id='3FPS2'><tr id='3FPS2'><dt id='3FPS2'><q id='3FPS2'><span id='3FPS2'><b id='3FPS2'><form id='3FPS2'><ins id='3FPS2'></ins><ul id='3FPS2'></ul><sub id='3FPS2'></sub></form><legend id='3FPS2'></legend><bdo id='3FPS2'><pre id='3FPS2'><center id='3FPS2'></center></pre></bdo></b><th id='3FPS2'></th></span></q></dt></tr></i><div id='3FPS2'><tfoot id='3FPS2'></tfoot><dl id='3FPS2'><fieldset id='3FPS2'></fieldset></dl></div>

                      • <bdo id='3FPS2'></bdo><ul id='3FPS2'></ul>

                      <tfoot id='3FPS2'></tfoot>