0

我在 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()) 中被引用。

4

3 回答 3

1

您是否考虑过制作一个可选函数库以及它的三个依赖项?

于 2009-08-19T22:06:35.570 回答
0

顺便说一句,用 an 围绕有问题的 a() 调用#ifdef来寻找#defined 旁边的东西b()听起来很有希望。

于 2009-08-19T21:56:38.787 回答
0

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

在我看来,您应该将这个新功能分离到不同的模块中。(不要放在公共模块中)。这样,谁需要它就可以包含它,谁不需要它,就不会。否则,您将被某种只能导致麻烦的条件编译宏卡住。

于 2009-08-19T22:03:53.360 回答