GCC 编译器在两台服务器上以不同的方式链接
gcc compiler linking differently on two servers
我有一个大型的源代码控制C++代码库,它可以在一个Linux服务器上编译和链接而不会出错。
我现在正在尝试在新服务器上设置相同的应用程序,因此在新框中签出了相同的代码。
但是,当我在这个新盒子上对相同的代码执行相同的 make 命令时,我会收到错误。原因似乎是因为在旧框中创建了共享库 (.so( 文件。在新盒子上 - 使用相同的代码,因此生成文件 - 创建静态库(.a(。
正在使用的编译器似乎也是相同的 - gcc-3.4.6。
显然,我在某处设置了一些不同的配置,但任何人都可以建议或这个配置可能在哪里?我想不出任何会导致这种效果的小变化。
请注意,链接器ld
是 binutils
的一部分,它作为您拥有的 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'
(来了解构建时发生的事情。
如果您需要真正的帮助,请提供更多细节。实际涉及哪些库?
- 为什么开关的优化方式与 c/c++ 中的链接不同?
- C++命名空间std的定义方式/位置(文档/标准链接)
- lib文件是以独占静态方式链接的,还是需要专门编译(VS2015)
- 如果与未使用的库链接,可执行文件的构建方式是否不同?
- 如何以Cmake的可移植方式获取LibstDCXX隐式链接目录
- 一种方式链接列表和不需要的第一个元素AFRTER填充
- 在 VS 中,以编程方式获取链接器>其他库目录属性,或获取宏值
- 带跳过列表的双链接列表,以排序方式插入
- Visual Studio静态链接的应用程序方式太小
- 为什么 GNU ld 在链接可执行文件和共享对象时以不同的方式解析符号
- 如何使用返回的临时链接的最佳方式
- CMake:拥有不同链接标志的正确方式
- 黄金链接器:指定节的对齐方式
- 如何在C/C++中以编程方式创建软链接
- C++ AntTweakBar:多个"variables"以某种方式链接。错误
- 如何以正确的方式编译和链接C/ c++共享对象库
- GCC 编译器在两台服务器上以不同的方式链接
- 为什么在c++中用shell链接查找快捷方式的目标路径时,它指的是windowsinstaller文件夹
- 链接谷歌TCMalloc库的最安全方式
- 是他们编译一个项目的一种方式,这样你的所有函数类都可以.进入一个可以链接的文件