在包含其自身类型的静态成员的类中使用 __declspec(dllimport)
Using __declspec(dllimport) in a class containing a static member of its own type
我有一个类,它的标题看起来像这样:
class MYCLASS_DECLSPEC MyClass
{
MyClass(int x);
....
static const MyClass Zero;
}
在实现文件上,我初始化了静态 const 成员:
const A A::Zero(0);
现在我想将此代码有时编译为 DLL,有时编译为静态库。通常的做法是像这样定义MYCLASS_DECLSPEC:
#ifdef BUILDING_MYDLL
#define MYCLASS_DECLSPEC __declspec(dllexport)
#else
#define MYCLASS_DECLSPEC __declspec(dllimport)
#endif
当我将此代码编译为 DLL(定义了 BUILDING_MYDLL)时,一切正常。但是当我将此代码编译为静态库(未定义BUILDING_MYDLL)时,出现以下错误:
error: definition of static data member 'MyClass::Zero' of dllimport'd class
如果我完全删除__declspec(dllimport),代码将成功编译为静态库。
我在Windows 7上使用mingw32编译器。
有人可以解释为什么会发生这种情况以及如何解决它吗?
我认为
我们将 #defines 放在另一个 #define 中:
#ifdef _DLL
#ifdef BUILDING_MYDLL
#define MYCLASS_DECLSPEC __declspec(dllexport)
#else
#define MYCLASS_DECLSPEC __declspec(dllimport)
#endif
#else
#define MYCLASS_DECLSPEC
#endif
相关文章:
- LibPrivoxy: 未解析的外部符号 __declspec(dllimport) int __stdcall Sta
- error dllimport 函数的定义不允许在一个特定的联合中,而其他类、结构和联合将按预期导出
- 绕过 Windows 中的 __declspec(dllimport) 到 Linux 项目的转换
- GetProcAddress vs __declspec( dllimport )
- C# DllImport 调用非托管C++函数回调
- 未解析的外部符号"__declspec(dllimport)与 Spdlog c++ 库
- 为什么MSVC(Visual C++)需要单独的dllimport和dllexport属性,而gcc不需要
- 使用 dllimport 代替 dllexport
- 在.NET Core中是否有与DllImport等效的Linux?
- C ++:DECLSPEC,静态库和DLL
- 使用 (c++11) 声明类型时放置 __declspec(dllimport) 关键字的位置
- 使用dllimport函数时程序崩溃
- VC 链接器错误使用Dllimport/DLLEXPORT宏将标题包括在多个项目中
- 如何在C#dllimport中指定C 变体返回类型
- C 到Csharp String与Dllimport通过,丢失的口音
- 挂钩 winapi 函数显示我 dllimport 错误
- 使用dllimport属性导入的函数参数
- C#dllimport意外崩溃
- How to DllImport char*
- dllimport类型问题