gpt4 book ai didi

visual-c++ -/OPT :REF 删除的函数中引用的未解析外部符号

转载 作者:行者123 更新时间:2023-12-03 16:21:41 27 4
gpt4 key购买 nike

我有一个实际上并没有调用的函数 bar(),它调用了未实现的 foo():

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

}

如果我将每个函数打包在一个单独的部分/COMDAT 中并要求链接器删除未使用的部分/COMDAT,我可以让 gcc 来编译程序
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()
{

}

尝试过,因为文档说:

Inlined functions and member functions defined inside a class declaration are always COMDATs.



但是不确定它是否是强大的解决方案,或者仅在这种特殊情况下有效。

关于visual-c++ -/OPT :REF 删除的函数中引用的未解析外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61236854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com