GCC 编译器在两台服务器上以不同的方式链接

gcc compiler linking differently on two servers

本文关键字:链接 方式 服务器 两台 编译器 GCC      更新时间:2023-10-16

我有一个大型的源代码控制C++代码库,它可以在一个Linux服务器上编译和链接而不会出错。

我现在正在尝试在新服务器上设置相同的应用程序,因此在新框中签出了相同的代码。

但是,当我在这个新盒子上对相同的代码执行相同的 make 命令时,我会收到错误。原因似乎是因为在旧框中创建了共享库 (.so( 文件。在新盒子上 - 使用相同的代码,因此生成文件 - 创建静态库(.a(。

正在使用的编译器似乎也是相同的 - gcc-3.4.6。

显然,我在某处设置了一些不同的配置,但任何人都可以建议或这个配置可能在哪里?我想不出任何会导致这种效果的小变化。

请注意,链接器ldbinutils 的一部分,它作为您拥有的 Unix 发行版的一部分随标准二进制文件一起提供,并且不是gcc套件的一部分。

因此,当您从旧服务器

转到新服务器时,您很有可能 从旧ld转到新ld .

由于库首先由链接器创建,因此有兴趣将其签出。

请注意,如果您怀疑编译器(因为它执行对ld的调用(,您可以编写一个ld的可执行脚本,该脚本仅回显它收到的参数,然后在幕后调用真正的ld(干预$PATH应该会让你开始(。

听起来很自然,要么是不同论点的情况(为什么?(要么是不同的二进制,找出哪个,你离解决问题又近了一步。

configure的东西可能Makefile-s生成略有不同的内容。

当你与-lfoo链接时,链接器首先尝试动态libfoo.so然后尝试静态libfoo.a

GCC 现在是 4.6.2 版本,因此您的 3.4.6版本非常旧。考虑升级它,因为 GCC 自那以后取得了很大进展。

尝试使用gcc -v(也许是make CC='gcc -v'(来了解构建时发生的事情。

如果您需要真正的帮助,请提供更多细节。实际涉及哪些库?