![](/img/trans.png)
[英]unresolved external symbol _main referenced in function ___tmainCRTStartup
[英]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.