Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ LNK2019使用带有静态链接的静态成员_C++_Visual Studio_Static Linking - Fatal编程技术网

C++ LNK2019使用带有静态链接的静态成员

C++ LNK2019使用带有静态链接的静态成员,c++,visual-studio,static-linking,C++,Visual Studio,Static Linking,我在VisualStudio15中有3个项目。第一个(A)和第二个(B)动态库,第三个(D)exe,使用这两个库。任务是链接 第一个库是静态的 我遇到的第一个问题是,如果我链接到两个D库,那么A中的单音就不再存在于单个副本中,而是出现在B和D中的两个不同副本中。我决定删除D中A中的链接,因为A中的所有导出函数现在都在B中 第二个问题。在A中,有以下形式的构造: 在标题中: struct A_CLASS SomeClass { static const double someMember; }

我在VisualStudio15中有3个项目。第一个(A)和第二个(B)动态库,第三个(D)exe,使用这两个库。任务是链接 第一个库是静态的

我遇到的第一个问题是,如果我链接到两个D库,那么A中的单音就不再存在于单个副本中,而是出现在B和D中的两个不同副本中。我决定删除D中A中的链接,因为A中的所有导出函数现在都在B中

第二个问题。在A中,有以下形式的构造:

在标题中:

struct A_CLASS SomeClass {
  static const double someMember;
};
在cpp中:

const double SomeClass::someMember = 14;
A_类是

#ifdef ( _BUILDA )
  #define A_CLASS         __declspec( dllexport )
#else
  #define A_CLASS         __declspec( dllimport )
#endif
如果我尝试在D中使用SomeClass::someMember-我将收到链接错误LNK2019。
dumpbin显示在B.lib和B.dll中有一个类型构造
?someMember@SomeClass@@2NA


如何修复此错误?

为什么要静态链接?如果静态库中有单例,那么链接到静态库的每个库或应用程序都会获得自己的单例副本。静态库就是这样工作的,我理解。有一个my和一个使用.dll的第三方项目。有一个客户使用这两个项目。问题是,在我和第三方项目中的某一时刻,a.dll可能有两个不同的版本。客户端加载第三方项目-a.dll加载到内存中,当加载我的项目时,a.dll未加载,因为它已在内存中。因此,会有压榨和错误。我可以用不同的名称构建一个.dll,但只有我会使用它,而且静态库已经有了其他客户端。不幸的是,你不能同时拥有它。如果一个dll有两个不同的不兼容版本,那么它们应该有不同的名称,以避免在单个应用程序中同时使用这两个版本时发生崩溃。e、 g.A_V1.dll和A_V2.dll