簡體   English   中英

未引用功能的“未解析的外部符號”

[英]“unresolved external symbol” for unreferenced function

我在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添加到項目中。

直到確定項目中引用了ANYWHERE的每個函數之后,鏈接器才似乎未應用OPT:REF。 即使在未引用的函數(a())中引用了(b())。

您是否考慮過建立一個可選函數庫,它是三個依賴項?

附帶地,用#ifdef包圍可疑的a()調用,該調用在b()旁邊尋找#define d聽起來很有希望。

我在一個非常常見的模塊中需要一個功能,該模塊需要其他3個模塊。 我只希望使用新功能的項目必須包括其他3個模塊,而那些不引用該功能的模塊就不會出現“未解決的外部符號”錯誤。

在我看來,您應該將此新功能分離到另一個模塊中。 (不要將其放在通用模塊中)。 這樣,任何需要它的人都可以包含它,不需要的人也不會包含它。 否則,您將陷入某種只會導致麻煩的條件編譯宏中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM