未解析的外部符号 (LNK2001) 在 .obj 文件中清晰可见

Unresolved external symbols (LNK2001) are clearly found in .obj file

提问人:Bob Michaelsen 提问时间:7/8/2020 更新时间:7/8/2020 访问量:289

问:

假设有 和 。
有许多私有静态数据成员,并为这些成员实现了一些 getter,因此它们可以从外部读取但不能写入。
includes ,但不对 的方法进行任何调用。
请注意,这些类分别是它们自己的 dll 的一部分。 作为一个整体,它被标记了,所以它应该是可见的。
class Aclass BClass AClass BA.hAClass A__declspec(dllexport)

在 Visual Studio 中构建它没有问题。
我的公司也需要我使用内部脚本进行构建,但这行不通。
我认为该脚本基于 gms-make,但我不确定。我也不知道那里使用了什么编译器或链接器。

把这个东西扔进我们的剧本里,我就进去了。
无法解析的符号是里面的私有静态数据成员。
当我查看使用 DUMPBIN 的符号时,我可以找到所有这些符号。
(我不太确定他们是否应该在那里,但他们确实在那里。
LNK2001: unresolved external symbolB.objclass AB.obj

更重要的是,另一个类,位于另一个dll中,可以从中导入所需的所有信息。无论是在 VS 中还是在我们的脚本中,即使设置与 .class Cclass Aclass B

删除使链接器再次感到高兴,但我需要在那里使用它。#include "A.h"B.cpp

我被告知问题不在于链接器,而在于我的代码,那么我可能做错了什么?
另外,为什么要尝试将符号解析为另一个类的私有成员?这些不应该是看不见的吗?
class B

C++ C++11 链接器错误未 解决 - 外部 LNK2001

评论

0赞 AndyG 7/8/2020
如果没有一个最小的可重现示例,这不可能肯定地说,但我的魔球告诉我,您的宏有条件地将 A 的方法标记为在构建项目时,否则在您的新 make 脚本中未正确定义。__declspecdllexportAdllimport
0赞 Bob Michaelsen 7/8/2020
不幸的是,我没有时间制定 reprex,特别是考虑到我不能放弃我们的构建脚本。另一方面:你的魔球可能在那里。谢谢你的提示。

答: 暂无答案