1

这并不像标题可能让您认为的那样天真。

对于第三方共享库中的几个函数符号,我从链接器/ld 收到“未定义引用”错误,我正在尝试与我的可执行文件链接。

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

奇怪的是我的项目中有几个可执行文件,有些面临这个问题,有些则没有。

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

4

2 回答 2

1

你检查过你的链接顺序吗?这在最近版本的 GCC 中变得更加严格。

例如,这样做会导致一个常见问题:

g++ -lX11 -lSuperLibrary awesomeApp.cpp

而不是这个:

g++ awesomeApp.cpp -lX11 -lSuperLibrary

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

有一些标志可以帮助您解决问题。要与上述相同,但使用链接器“分组”库并在它们上进行递归链接(以链接器性能为代价),您可以执行以下操作:

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

Where-Wl,<option>将一个选项传递给链接器......在这种情况下--start-group--end-group.

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

我希望这会有所帮助。

于 2012-08-15T09:59:00.887 回答
0

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

于 2009-12-16T15:22:05.317 回答