gcc编译器在两台服务器上链接不同

时间:2011-11-22 17:04:23

标签: c++ gcc linker shared-libraries static-libraries

我有一个大型的源代码控制的C ++代码库,可以在一台Linux服务器上无错误地编译和链接。

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

因此,当您从旧服务器转到新服务器时,可能会从旧的ld传递到新的ld

由于链接器首先创建了一个库,因此有兴趣查看它。

请注意,如果您怀疑编译器(因为它执行对ld的调用),您可以编写一个ld可执行脚本,它只是回显它收到的参数,然后调用真实的{{1}在幕后(干扰ld应该让你去)。

听起来很自然,不论是不同的论点(为什么?),还是不同的双胞胎,弄清楚哪一个,你将更接近解决你的问题。

答案 1 :(得分:1)

configure内容可能会产生稍微不同的Makefile - s。

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

GCC现在版本为4.6.2 ,因此您的 3.4.6 版本已经很老了。考虑升级它,因为自那以后GCC取得了很大的进步。

尝试使用gcc -v(可能为make CC='gcc -v')来了解构建时的情况。

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