编译和链接不同版本的gcc在linux上
Compiling and linking with a different versions of gcc on linux
我计划用gcc 4.7.1编译一个静态库(mylib.a)。我想利用c++11的优点,所以使用-std=c++11。我编译这个库的平台是带有glibc-2.8的x86_64 SLES 11。
然后我想在遗留平台上链接这个静态库和遗留代码,因此我必须使用gcc 4.1.2来链接和编译遗留代码。所以在我的库头中,我不会使用任何c++ 11特定的代码。此外,我将链接libstdc++。来自gcc.4.7.1。这个平台,我想链接我的lib。libstdc++.a(gcc4.7.1)和遗留的目标文件是x86_64 SLES 10与glibc-2.4。
我用mylib中的一些虚拟c++ 11代码(std::async())尝试了所有这些混乱。A,它起作用了。我认为这是可能的,只是因为ELF的要求。是我想对了吗,还是ELF与此无关?我应该期待什么样的错误,如果mylib。A将包含一些真正复杂的逻辑?
Linux有一个c++应用程序二进制接口(ABI),它已经存在一段时间了。这意味着Linux上编译器之间的调用约定和名称混淆是固定的。因此,只要库是兼容的,您就应该能够使用不同的编译器(或同一编译器的不同版本)进行编译,并拥有正确可靠地链接在一起的代码。
不完全是ELF要求本身…
GCC保证二进制兼容性,一直到旧版本的3。只要您链接到的libstdc++具有新的库特性,就没有理由不能使用它们。你只需要远离用GCC 4.1.2编译的代码中的新语言和库特性。
相关文章:
- Steam 回调在 Linux / GCC 编译期间触发警告
- 调试模板时出现问题.专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误构建失败:模板参数 1
- 强制 Clang 在 Linux 中使用 llvm 而不是 GCC
- 关于这个在 Linux 上使用 gcc 编译的程序中的 vtable,nm 告诉我什么?
- 我可以在Windows(Visual C++)中读取bin文件,但不能在linux(GCC)上读取bin文件
- 将静态库链接到 gcc Linux 中的动态实验室
- 如何在没有编译器的情况下在 Linux 上安装 gcc
- C 模板未在Linux GCC上编译
- 除了 Linux 上的源代码和编译 (GCC) 之外,有没有办法在 Windows 中托管 IDE
- 简单派生类上的Linux GCC链接错误
- GCC Bug,使用尖括号通过宏包含标头时"linux"路径中的字符串"<>"替换为 "1"
- 如何使用 arm-linux-gcc 交叉编译 gmock
- GCC 编译器对类型转换有什么作用?为什么 mac 和 Linux 上的输出不同
- 有没有比 GCC 或 Clang 实现更直观的方法来在 Linux 的C++中使用内联汇编
- 什么是最好的(即快速和小)是在GCC linux上atomic_fetch_ptr和atomic_set_ptr
- DIS(P X)-X在GCC Linux X86-64 C 中始终导致Pointer P和Integer X的P
- 什么是 gcc Linux x86-64 C++中的有效指针
- C++ / gcc / linux 中的延续/协程/生成器
- gcc(Linux/MinGW)是否存在编译器标志,以便在运行时引发除以零的错误
- 在GCC linux中编译时的一堆错误和警告