Visual Studio 2005链接器问题

0 c++ visual-studio-2005 linker-errors visual-c++-2005

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

Nic*_*yer 14

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

__declspec,这通常是通过创建这样的标题来实现的:

#ifdef PROJECT_A_EXPORTS
#define PROJECT_A_API __declspec(dllexport)
#else
#define PROJECT_A_API __declspec(dllimport)
#endif
Run Code Online (Sandbox Code Playgroud)

然后,当您要导出类的所有成员时,您可以编写:

class PROJECT_A_API MyClass
{
   // ...
};
Run Code Online (Sandbox Code Playgroud)

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

以下是有关DEF文件路径的一些信息.但这很难维护,而且在C++中你需要列出每个符号的装饰名称,这可能很痛苦.

  • 那么接受他的答案吧.给他15分:) (8认同)