来自ld的“未定义参考”错误

时间:2009-12-16 15:15:57

标签: gcc makefile linker linker-errors

这并不像标题可能引导你思考那样天真。

我从链接器/ ld收到第三方共享库中的几个函数符号的“Undefined Reference”错误,我正在尝试链接到我的可执行文件。

奇怪的是,该库本身应该包含有问题的符号的定义。

陌生人的一部分是我的项目中有几个可执行文件,有些可能遇到这个问题,有些则没有。

我搞砸了我的gcc / ld标志还是别的什么?

2 个答案:

答案 0 :(得分:0)

无法从您的描述中说出,其中包含大致零有用的信息。一种可能性是您没有在某些源文件中包含正确的头文件。

答案 1 :(得分:0)

您是否检查过您的链接订单?这在最近的海湾合作委员会版本中变得更加严格。

例如,执行此操作会导致常见问题:

g++ -lX11 -lSuperLibrary awesomeApp.cpp

而不是:

g++ awesomeApp.cpp -lX11 -lSuperLibrary

如果它们是相互依赖的,那么库标志的顺序也很重要。

有一些用于执行库多次传递的标志,可能有助于您解决问题。为了与上面相同,但使用链接器“分组”库并对它们执行递归链接(以链接器性能开销),您可以执行以下操作:

g++ awesomeApp.cpp -Wl,--start-group -lX11 -lSuperLibrary -Wl,--end-group

-Wl,<option>将选项传递给链接器......在本例中为--start-group--end-group

链接顺序重要的一个很好的类比是here

我希望有所帮助。