如何使用在DLL上定义的全局const变量

时间:2019-05-04 19:09:39

标签: c++ dll porting

我有下一个文件 common / const.h

#ifndef COMMON_CONST_H
#define COMMON_CONST_H

#if defined _WIN32 || defined _WIN64
#ifdef PCOM_EXPORTS
#define PCOM_WINAPI __declspec(dllexport)
#else
#define PCOM_WINAPI __declspec(dllimport)
#endif // PCOM_EXPORTS
#endif // _WIN32

namespace common {

extern PCOM_WINAPI const char DIR_SEPARATOR;

}

#endif /* COMMON_CONST_H */

common / const.cpp

#include "common/const.h"

namespace common {

#if defined _WIN32 || defined _WIN64
const char DIR_SEPARATOR = '\\';
#else
const char DIR_SEPARATOR = '/';
#endif

}

我生成其DLL文件没有问题。但是,当我想从另一个库中使用此 DIR_SEPARATOR 变量时,我得到:

  

Util.obj:错误LNK2001:未解析的外部符号“ char const”   common :: DIR_SEPARATOR“:致命错误LNK1120:1个未解决的外部因素

Util.cpp(dll客户端)代码为:

#include "common/const.h"
...
namespace db {
...
shared_ptr<iptree> Util::loadIniFile(const string& filePath) {
  string file = filePath;
  replace(file.begin(), file.end(), '/', prompt::common::DIR_SEPARATOR);
  shared_ptr<iptree> tree(new iptree);
  ...
}

}

我的问题是:

  • 为什么我得到 无法解析的外部符号“ char const” common :: DIR_SEPARATOR“ ,如果我在Util.cpp上包含common / const.h(namespace common { extern PCOM_WINAPI const char DIR_SEPARATOR; })?
  • 所有这些代码在Linux(.so生成并使用 由客户)。为什么在将其移植到Windows时出现此错误?视觉效果 Studio 2017默认使用C ++ 14作为标准。在Linux上,我使用C ++ 11。 DLL项目和客户端项目具有相同的配置。因此,我几乎可以确定问题不在这里。
  • 要使用这些代码我需要做什么?

我只想设置一次 DIR_SEPARATOR 值。这种情况可能吗?我想念什么吗?

谢谢。

0 个答案:

没有答案