C++ visualc&x2B+;链接优化以保留特定.obj文件中的函数/数据

C++ visualc&x2B+;链接优化以保留特定.obj文件中的函数/数据,c++,visual-c++,linker,static-libraries,static-linking,C++,Visual C++,Linker,Static Libraries,Static Linking,我有一个静态库,其中包含一系列具有相同接口的函数 CBase* instantiateCImplA(args); CBase* instantiateCImplB(args); CBase* instantiateCImplC(args); 每个函数都位于不同的.obj文件中,指向每个函数的指针的全局列表保存在另一个.obj文件中: map<string, InstantiatorCImplFunc > g_InstantiatorCImplList; 其思想是,链接到此库的应用

我有一个静态库,其中包含一系列具有相同接口的函数

CBase* instantiateCImplA(args);
CBase* instantiateCImplB(args);
CBase* instantiateCImplC(args);
每个函数都位于不同的.obj文件中,指向每个函数的指针的全局列表保存在另一个.obj文件中:

map<string, InstantiatorCImplFunc > g_InstantiatorCImplList;
其思想是,链接到此库的应用程序只需通过instanceImple()函数精确地指定它需要的实现来实例化CImpl类。因此,应用程序将使用哪个实现是在运行时确定的,因此无法在链接时预测

我需要做的是明确地强制图书管理员对这些功能进行符号引用。我只知道两种方法。一种方法是简单地强制整个库中的所有符号(/OPT:NOREF),另一种方法是我可以指定要保留的特定符号(/INCLUDE:symbol)。尽管后者仍然允许我保持最佳图像大小,但必须指定我需要的每个符号是相当不方便的(在我的情况下,这需要函数引用和全局变量引用)

是否有类似的链接优化选项允许您强制图书管理员将所有符号引用保留在特定的.obj文件中?而不是按符号

CBase* instantiateCImple(string whichCImpl, args)
{
  assert( g_CImplInstantiatorList[whichCImpl] != g_CImplInstantiatorList.end() );
  return g_CImplInstantiatorList[whichCImpl](args);
}