c++ - gcc编译器在两台服务器上的链接不同

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

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

我现在正尝试在新服务器上设置相同的应用程序,因此已在新机器上 check out 相同的代码。

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

所使用的编译器似乎也相同 - gcc-3.4.6。

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

最佳答案

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

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

由于库首先由链接器创建,因此有兴趣检查一下。

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

这听起来很自然,它要么是不同参数的情况(为什么?),要么是不同的 binray,弄清楚是哪一个,您将离解决问题更近一步。

关于c++ - gcc编译器在两台服务器上的链接不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8230720/

相关文章:

c++ - 在没有 delete 运算符的情况下编译 C++

c++ - 如何初始化boost::process::child(boost process 0.5)?

c - 引用外部全局变量惨遭失败

c++ - 在 Ubuntu 13.04 上链接 boost::filesystem

c++ - 将 char[] 转换为 unsigned int 得到 : dereferencing type-punned pointer will break strict-aliasing rules

c++ - 使用自己的库编译 Qt GUI 时出现链接器错误

C++、数组声明、模板、链接器错误

c++ - 将 Qt::MatchExactly 设置为不区分大小写

c++ - 具有显式构造函数的智能指针让我出错

c++ - 链接器错误 - 带有 libboost_thread 的 macOS 上 undefined symbol std::string::c_str() const?