![](/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.