【问题标题】:C++/C Shareing global variable between 2 projects in Visual StudioC++/C 在 Visual Studio 中的 2 个项目之间共享全局变量
【发布时间】:2013-11-18 19:10:46
【问题描述】:

在 VS 中,我有一个 sln,包括 2 个项目:

项目 A:

啊.h

#include <string>
extern bool flag;    

A.cpp

#include "A.h"
bool flag = false;

void funcA()
{
  int i = 0;
}

项目 B:

B.h

#include <stdio.h>

B.cpp

#include "B.h"
#include "..\ProjectA\A.h"

void main()
{
    int j = 10;
    flag  = true;
    std::cout << j << "\n" << flag ;
}

我将 projectA 设置为 DLL,将 projectB 设置为 EXE。

在链接中,出现错误:error LNK2001: unresolved external symbol "bool flag" (?flag@@3_NA)

是否应该在设置中手动将projectB指定为projectA?

谢谢。

【问题讨论】:

  • 这是不好的做法。让 DLL 公开一个 get/set 方法来访问该值。
  • @Loki:这里没有应用程序边界,项目A是一个DLL,被加载到另一个的内存空间中。
  • @OldProgrammer:我也更喜欢只导出函数而不导出数据,但是函数也会出现同样的问题。
  • @OldProgrammer 只需要让它工作。我知道这样的全局变量不好。

标签: c++ variables global projects


【解决方案1】:

像这样:

啊.h

#ifndef LIBA_API
#define LIBA_API __declspec(dllimport)
#endif

extern LIBA_API bool flag;    

A.cpp

#define LIBA_API __declspec(dllexport)
#include "A.h"
LIBA_API bool flag = false;

void funcA()
{
  int i = 0;
}

(无需更改B.hB.cpp

【讨论】:

  • 得到错误:错误LNK2001:无法解析的外部符号“_declspec(dllimport) bool flag”(__imp?flag@@3_NA) d:\...\ProjectB\ B.obj 项目B
  • @yfeng:项目 A 将创建一个导入库。项目 B 在构建时需要它。 Visual Studio“添加引用...到项目”功能应该有助于设置。
  • 谢谢。对于 projectA,我将 Linker-General-Output File 设置为 $(SolutionDir)LIB\$(TargetName)$(TargetExt)。然后对于 projectB,将 Linker-General-Additional Library Directories 设置为 $(SolutionDir)LIB。但是有同样的错误
  • @yfeng:项目 B 需要 Inputs 下列出的实际文件名,而不仅仅是目录。你能想象如果链接器读取系统库路径中的所有(100 个)库会有多慢吗?你为什么要搞这个。就像我在之前的评论中所说的那样,使用“添加引用”在项目之间添加依赖项。
  • 有效!谢谢!以前我没有弄清楚如何添加对 projectB 的引用。我认为包括目录是一种方式......从这个链接,我添加了referencelink。我更改输出目录的原因是将来自多个项目的所有 DLL 收集到一个位置。这对我来说比在每个项目中分发更方便。
猜你喜欢
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 2011-04-11
  • 2015-08-13
  • 2013-02-16
  • 1970-01-01
相关资源
最近更新 更多