这并不像标题可能让您认为的那样天真。
对于第三方共享库中的几个函数符号,我从链接器/ld 收到“未定义引用”错误,我正在尝试与我的可执行文件链接。
奇怪的是,该库本身应该包含有问题的违规符号的定义。
奇怪的是我的项目中有几个可执行文件,有些面临这个问题,有些则没有。
我搞砸了我的 gcc/ld 标志还是别的什么?
这并不像标题可能让您认为的那样天真。
对于第三方共享库中的几个函数符号,我从链接器/ld 收到“未定义引用”错误,我正在尝试与我的可执行文件链接。
奇怪的是,该库本身应该包含有问题的违规符号的定义。
奇怪的是我的项目中有几个可执行文件,有些面临这个问题,有些则没有。
我搞砸了我的 gcc/ld 标志还是别的什么?
你检查过你的链接顺序吗?这在最近版本的 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
我希望这会有所帮助。
不可能从您的描述中说出来,其中包含大约零有用的信息。一种可能性是您没有在某些源文件中包含正确的头文件。