簡體   English   中英

由 /OPT:REF 刪除的 function 中引用的未解析外部符號

[英]unresolved external symbol referenced in function removed by /OPT:REF

我有一個我實際上沒有調用的 function bar(),它調用了未實現的 foo():

void foo();
void bar()
{
    foo();
}
int main()
{

}

If I package each function in a separate section/COMDAT and ask the linker to remove unused sections/COMDAT, I can get gcc to compile the program

gcc -ffunction-sections -Xlinker --gc-sections LinkerFunctions.cpp

但在 Visual C++ 2019 中等效

cl /Gy LinkerFunctions.cpp /link /OPT:REF

吠叫

error LNK2019: unresolved external symbol "void __cdecl foo(void)" (?foo@@YAXXZ) referenced in function "void __cdecl bar(void)" (?bar@@YAXXZ)

如何讓 msvc 編譯程序?

通過添加inline使您的示例正常工作,即使在添加__declspec(noinline)以防止實際內聯之后也是如此。

void foo();

__declspec(noinline)
inline void bar()
{
    foo();
}

int main()
{

}

嘗試過,因為文檔說:

在 class 聲明中定義的內聯函數和成員函數始終是 COMDAT。

但是不確定它是否是強大的解決方案,或者僅在這種特殊情況下有效。

偶然發現了一個 linker 開關:

cl incomplete.cpp /link /FORCE:UNRESOLVED

會發出警告,但實際上會起作用。

暫無
暫無

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

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