0

我正在使用 GCC 编译器在 C++ 的 Linux 环境中工作。

我目前正在修改和升级大量预先存在的代码。作为其中的一部分,有必要在各个地方的整个代码中添加大量小引用以将事物链接在一起,并且还需要添加几个新的外部代码库。还有一个相当大且复杂的 Makefile 结构,链接到 configure.ac 文件来处理构建过程。

在开始构建过程时,一切都可以顺利编译,但是在尝试使用我们创建的新添加的自定义代码库时,会出现可怕的链接器错误。我们现在已经通过大量的代码,用细齿梳寻找拼写不匹配,检查所有库包含在构建过​​程中的顺序,并检查创建的 .o 文件是否包含我们使用转储所需的内容,以及一切都在他们应该在的地方。我们还单独测试了这个库,问题绝对不在那里。

简而言之,我们已经尝试了在这些情况下通常应该做的大多数事情。

是否有一个 C++ 工具可以自动检测链接器错误,类似于 cppcheck 或 splint(我们都运行无济于事),可以在这里提供帮助?

4

2 回答 2

4

不知道你的平台,但我花了一些时间在 gcc 中解决链接器问题,直到我意识到静态库 ( .a) 链接需要特定的顺序,它与链接gcc object.o first.a second.a不同gcc object.o second.a first.a

于 2009-12-01T09:53:46.157 回答
2

FWIW(不多)我尝试通过使用另一个链接器来解决这类问题,因为我可以访问几个不同的平台。如果您可以使用另一个链接器,您会发现:

a)程序链接,它将您的问题从“为什么不链接?” 到“链接器和链接之间有什么区别?” 这并不完全是向前迈出的一步,但有时向一侧迈出一步会给您带来不同的视角,您可以从中看到解决方案;

或者

b) 链接失败,在这种情况下,其他链接器可能会提供更多有用的信息来说明失败的原因。

于 2009-12-01T10:00:22.410 回答