【发布时间】:2014-07-03 11:25:41
【问题描述】:
我已经编写了以下测试程序
int proc1();
extern int globalvar;
int func1 ()
{
return globalvar + 1;
}
int func2()
{
return proc1()+3;
}
int main()
{
return 0;
}
如您所见,该程序没有执行任何操作。然而,在编译它时,我遇到了globalvar 和int proc1() 的链接器错误,尽管这些都不会被入口点函数main 引用。
我在 Windows(使用 cl)和 Linux(使用 gcc)上都遇到了问题。
有没有办法指示编译器/链接器不要从入口点(在 cl、gcc 和 clang 上)链接这个未引用的全局变量和函数?
Windows 上的确切错误消息:
test.obj : error LNK2019: unresolved external symbol "int globalvar" (?globalvar@@3HA) referenced in function "int __cdecl func1(void)" (?func1@@YAHXZ)
test.obj : error LNK2019: unresolved external symbol "int __cdecl proc1(void)" (?proc1@@YAHXZ) referenced in function "int __cdecl func2(void)" (?func2@@YAHXZ)
test.exe : fatal error LNK1120: 2 unresolved externals
【问题讨论】:
-
these are not going to be used in the program- 那你觉得return globalvar + 1;和return proc1() + 3;怎么办? -
@user3477950:查看编辑。这些不会被入口点函数 main 引用。
-
然后呢?他们的调用者不是
static,所以即使如果链接器执行LTO,它也不可能消除它们... -
@user3477950:是不是因为这些功能可以在其他翻译单元中使用?但我只有一个翻译单元。
-
@dbasic 我认为您遇到了未定义的参考错误。在哪里定义
proc1()函数。和globalvar变量。
标签: c++ c gcc linker-errors cl