链接开始/结束组:为什么我的链接失败,除非一些库被留在组外

时间:2018-06-06 11:25:08

标签: gcc linker linker-errors

我已经完成了将一个可用的Visual Studio构建移植到Linux上的gcc的任务。

该解决方案有60多个项目。要链接最终的exe需要许多静态库,一些由解决方案构建,一些外部库。

我已经了解了为什么命令对gcc很重要(我的基本理解是,基本上你需要对它们进行排序,以便在提供它们的lib之前列出需要功能的lib。)

VS并不关心libs在命令行中出现的顺序,因此我没有继承有意义的libs出现的顺序。

由于涉及查找正确顺序的库的数量似乎是一项相当大的任务,当前正确的顺序可能会被后来的更改打破,而且在库中可能存在循环引用。所有这些都导致我在libs周围使用start-group和end-group。

但是我发现包括组中的所有库都没有解析,但是从组中排除了一些lib并在结束组之后列出它们会链接。

那是

-start-group lSomelibA lSomelibB ...  lSomelibX lSomelibY lSomelibZ-end-group 

因未解决的符号而失败。

-start-group -lSomelibA -lSomelibB ... -lSomelibX end-group -lSomelibY -lSomelibZ

工作

 -start-group lSomelibA lSomelibB ...  lSomelibX lSomelibY lSomelibZ-end-group lSomelibY lSomelibZ

重复那些lib也有效。

我已经阅读了关于开始/结束组的内容,但无法理解为什么包含所有库可能会失败。

为什么在包含lib失败后将lib留在组外?

未解决的符号错误引用GLIBCXX包含版本号,确切的消息随着重新排序lib而改变。我猜测某些内容可能不止一次被定义。

0 个答案:

没有答案