我有一个大型的源代码控制的C ++代码库,可以在一台Linux服务器上无错误地编译和链接。
我现在正尝试在新服务器上设置相同的应用程序,因此在新的盒子上检出了相同的代码。
但是,当我在这个新盒子上的相同代码上执行相同的make命令时,我会收到错误。原因似乎是因为在旧框中,创建了共享库(.so)文件。在新框中 - 使用相同的代码,因此使用makefile - 创建静态库(.a)。
正在使用的编译器似乎与gcc-3.4.6相同。
显然,我在某处设置了不同的配置,但任何人都可以建议或配置可能在哪里?我想不出任何会导致这种影响的微小变化。
答案 0 :(得分:2)
请注意,链接器ld
是binutils
的一部分,它与标准二进制文件一起作为您所拥有的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'
)来了解构建时的情况。
如果您需要真正的帮助,请提供更多细节。涉及哪些实际的库?