未参考功能的“未解析的外部符号”

时间:2009-08-19 21:43:02

标签: c++ linker visual-studio-2003

我在Visual Studio 2003中。我在一个非常常见的模块中有一个功能,需要3个其他模块。我只希望使用新函数的项目必须包含其他3个模块,以及那些没有引用函数链接而没有“未解析的外部符号”错误的模块。我尝试了功能级别链接,OPT:REF和我能想到的每个项目设置,但链接器总是抱怨。我做了一个简单的测试示例。任何想法都会很棒......

//main.cpp
//#include "a.h"
int _tmain(int argc, _TCHAR* argv[])
{
  //a();
  return 0;
}

//a.h
#include "b.h"
void a();

//a.cpp
#include "a.h"
#include "b.h"
void a()
{
  b();
}

//b.h
void b();

//b.cpp
#include "b.h"
void b()
{
}

只要从不调用a(),我需要项目只在项目中使用main.cpp和a.cpp进行编译。如果在_tmain()中调用a(),那么当然必须将b.cpp添加到项目中。

链接器似乎没有应用OPT:REF,直到它确定每个函数引用ANYWHERE在项目中。即使它(b())在未引用的函数(a())中被引用。

3 个答案:

答案 0 :(得分:1)

您是否考虑过创建一个可选函数库,它是三个依赖项?

答案 1 :(得分:0)

#ifdef附近查找#define d b() d {{1}}旁边的可疑a()调用的声音很有希望。

答案 2 :(得分:0)

  

我在一个非常常见的模块中有一个功能,需要3个其他模块。我只希望使用新函数的项目必须包含其他3个模块,以及那些没有引用函数链接而没有“未解析的外部符号”错误的模块。

听起来你应该把这个新功能分成不同的模块。 (不要将它放在通用模块中)。这样,任何需要它的人都可以包括它,不管是谁,都不会。否则,你会遇到某些条件编译宏,这只会导致麻烦。

相关问题