0

我大多是 Visual Studio 的新手,所以如果这是一个基本问题,我深表歉意。我有一个包含许多项目的解决方案。在项目 A 中,我有一组预先存在的文件,我添加了一个新类。项目 B 使用项目 A 中的新类中编码的功能。首先构建项目 A,然后生成一个 .lib 文件,然后将该 .lib 文件链接到项目 B。但是,当我去创建 .lib 文件时对于 Project BI,出现链接错误,引用了我添加的 Project A 中的新功能。将“dumpbin”命令与从项目 A 生成的 .lib 文件一起使用,我注意到我添加的函数的符号不存在。但是,在项目 A 中编译新类后创建的 .obj 文件确实包含这些符号。知道为什么这些符号不会出现在项目 A 中。

4

1 回答 1

15

我假设这些都是 DLL 项目。在 Windows 上,您需要通过用 装饰符号来导出符号__declspec(dllexport),或者您需要使用 .DEF 文件来指示要导出的符号。

使用__declspec,这通常是通过创建类似这样的标题来完成的:

#ifdef PROJECT_A_EXPORTS
#define PROJECT_A_API __declspec(dllexport)
#else
#define PROJECT_A_API __declspec(dllimport)
#endif

然后当你想导出一个类的所有成员时,你写:

class PROJECT_A_API MyClass
{
   // ...
};

并在编译项目 A 而不是项目 B 时定义PROJECT_A_EXPORTS。这样,您可以在两个项目之间共享相同的 MyClass.h 头文件。在编译项目 A 时,您将导出符号,在编译项目 B 时,您将导入符号。

这是有关 DEF 文件路径的一些信息。但是,这可能很难维护,并且在 C++ 中,您需要列出每个符号的修饰名称,这可能会很痛苦。

于 2009-07-24T17:46:05.060 回答