C++ LNK2019使用带有静态链接的静态成员
我在VisualStudio15中有3个项目。第一个(A)和第二个(B)动态库,第三个(D)exe,使用这两个库。任务是链接 第一个库是静态的 我遇到的第一个问题是,如果我链接到两个D库,那么A中的单音就不再存在于单个副本中,而是出现在B和D中的两个不同副本中。我决定删除D中A中的链接,因为A中的所有导出函数现在都在B中 第二个问题。在A中,有以下形式的构造: 在标题中: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; }
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