У меня есть следующий файл 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": fatalошибка 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" если я включаю common / const.h (
namespace common { extern PCOM_WINAPI const char DIR_SEPARATOR; }
) в Util.cpp? - Всеэтот код отлично работает в Linux (.so генерируется и используется клиентом).Почему я получаю эти ошибки при портировании на Windows?Visual Studio 2017 по умолчанию использует C ++ 14.В Linux я использую C ++ 11.Проект Dll и проект клиента имеют одинаковые конфигурации.Так что я почти уверен, что проблем здесь нет.
- Что мне нужно сделать, чтобы заставить работать этот код?
Я хотел бы установить DIR_SEPARATOR значение только один раз.Возможно ли это в этом случае?Я что-то упустил?
Заранее спасибо.