我有一个大型的源代码控制的 C++ 代码库,它可以在一台 Linux 服务器上无错误地编译和链接。
我现在正尝试在新服务器上设置相同的应用程序,因此已在新机器上 check out 相同的代码。
但是,当我在这个新盒子上对相同的代码执行相同的 make 命令时,我得到了错误。原因似乎是因为在旧机器上创建了共享库 (.so) 文件。在新盒子上——它使用相同的代码,因此使用 makefile——生成静态库 (.a)。
所使用的编译器似乎也相同 - gcc-3.4.6。
显然,我在某处设置了一些不同的配置,但任何人都可以建议或这个配置可能在哪里?我想不出任何会导致这种效果的小变化。
最佳答案
请注意,链接器 ld
是 binutils
的一部分,它作为您拥有的 Unix 发行版的一部分与标准二进制文件一起提供,不是 gcc
套件的一部分。
因此,当您从旧服务器转到新服务器时,您很可能会从旧的 ld
传递到新的 ld
。
由于库首先由链接器创建,因此有兴趣检查一下。
请注意,如果您怀疑编译器(因为它执行对 ld
的调用),您可以编写一个 ld
可执行脚本,该脚本仅回显它接收到的参数,然后在幕后调用真正的 ld
(干预 $PATH
应该让你开始)。
这听起来很自然,它要么是不同参数的情况(为什么?),要么是不同的 binray,弄清楚是哪一个,您将离解决问题更近一步。
关于c++ - gcc编译器在两台服务器上的链接不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230720/