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