g++ 4.1.2 与 g++ 4.6 混合

2023-12-13

所以,事情是这样的。要在 Linux 上开发 Maya 插件,我们必须使用 GCC 4.1.2 进行编译。但该编译器不支持任何新的 C++0x 功能。

是否可以做这样的事情:

gcc-4.6 -o test.cpp.o -c test.cpp
gcc-4.1.2 -o exec_test test.cpp.o

我严重怀疑这是否可能,但值得一问。

如果这是不可能的,有没有办法实现类似的目标?


这两个 GCC 版本的 ABI 是兼容的,问题是 GCC 4.6 编译的对象可能依赖于仅由较新的 GCC 的 C++ 标准库定义的符号(例如,如果您使用std::fstream构造函数采用std::string您的对象将依赖于该符号,该符号仅出现在支持 C++11 的最新版本的 GCC 中。)

只要您从 GCC 4.6 链接到 libstdc++(即libstdc++.so.6.0.16)即通过链接-L /path/to/gcc-4.6/lib

您还必须确保在运行时找到该库的较新版本,即通过告诉动态加载器使用该库,使用列出的方法之一libstdc++ 手册

例如:

$ cat x.cc
#include <vector>
#include <fstream>
#include <string>
int main()
{
    std::string s = "output";
    std::ofstream f(s);
    std::vector<int> v(3);
    int n;
    for (auto i : v)
        ++n;
    f << n << '\n';
}
$ g++-4.6 -std=c++0x x.cc -c
$ g++-4.1 x.o
x.o: In function `main':
x.cc:(.text+0x5c): undefined reference to `std::basic_ofstream<char, std::char_traits<char> >::basic_ofstream(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::_Ios_Openmode)'
collect2: ld returned 1 exit status
$ g++-4.1 x.o -L /path/to/4.6/lib64 -Wl,-rpath,/path/to/4.6/lib64
$ ./a.out
$ cat output
3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

g++ 4.1.2 与 g++ 4.6 混合 的相关文章

  • 如何在 Visual C++ 中读取版本资源

    我在 C 项目的资源中有一个版本资源 其中包含版本号 版权和构建详细信息 有没有一种简单的方法可以在运行时访问它来填充我的帮助 关于对话框 因为我目前正在维护此信息的单独常量值 理想情况下 该解决方案应适用于 Windows CE mobi
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 如何正确初始化“min”变量?

    我的代码中有一个小问题 用于从一系列数字中查找最小值 当我初始化时min 0 最小值结果为0 但是当我不初始化时min 答案是正确的 为什么会出现这种情况 Xcode 告诉我应该初始化min多变的 int a 20 0 int max 0
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 无法更改 RStudio 中的 R 版本

    我的 RStudio V 0 99 491 无法更改 R 版本 我以平常的方式行事Global Options gt R Version 然后它挂起并且不再工作或反应 R 运行良好的初始版本是R 3 1 0 我以前从未遇到过这样的问题 也许
  • libstdc++新标准库功能支持表

    是否有一个表格指定新标准 11 和 14 支持previousGNU libstdc 的版本 我找到了这样的表compiler https gcc gnu org projects cxx0x html并为当前的库状态 https gcc
  • 为什么调用本地函数需要重定位?

    我写了下面的C代码 int foo int x int y return x int main return foo 1 2 然后我跑了 gcc c my file c objdump S my file o and got text 节的
  • 如何在 Windows 上的 GCC 中链接 CS50 C 库

    我是 编程新手 一直在尝试使用以下命令编译我的代码MinGW https en wikipedia org wiki MinGW GCC 但我尝试包括CS50 https en wikipedia org wiki CS50 cs50 c
  • 与 GCC 的联想数学

    我创建了一个双双 https en wikipedia org wiki Quadruple precision floating point format Double double arithmeticC 中的数据类型 我尝试过 Ofa
  • 防止基准代码中的代码被 GCC 移动

    我正在尝试微调我们正在使用的一些基准代码 并且想知道是否有一种方法可以明确地与 GCC 通信如何排序某些代码位 例如 给定以下代码块 Pre 启动定时器 Body 停止定时器 Post 我想告诉GCC 每个块必须保持上述顺序 没有任何指令泄
  • 如何静默来自 GCC 的 #pragma 消息

    我没兴趣看 pragma message适合我的构建 它只会使输出变得混乱 我顺便告诉 Clang Wno pragma messages 但是 GCC 不理解该标志 并且我找不到任何类似的标志 我如何要求 GCC 忽略 pragma me
  • 为什么 GCC 不自动矢量化这个循环?

    我正在尝试优化一个占用程序大量计算时间的循环 但是 当我使用 O3 ffast math ftree vectorizer verbose 6 GCC 输出打开自动矢量化时 它无法对循环进行矢量化 我正在使用海湾合作委员会4 4 5 代码
  • 如何阻止 Cygwin 下的 gcc 将“.exe”添加到已编译的可执行文件中?

    我想知道如何防止Cygwin下的gcc自动将 exe扩展名添加到编译文件中 因为我刚刚给自己带来了很多 丢失文件 的困惑 就上下文而言 我正在大学从事一个 C 项目 通常在运行 Ubuntu 与 Windows 双启动 的实验室工作 但在家
  • gcc 使用 c++11 标准,即使 98 明确指定

    我收到一个奇怪的错误 我怀疑与我的系统配置有关 我正在使用 g version 编译 链接一个简单的 C 程序g Ubuntu 5 4 0 6ubuntu1 16 04 4 5 4 0 20160609 默认语言标准记录为 c 98 但即使
  • GCC 编译器警告:扩展初始化列表仅适用于 c++0x

    使用此成员初 始化 StatsScreen StatsScreen GameState State level m Level level 我收到以下警告 extended initializer lists only available
  • 使用 GCC 预编译头文件

    如何获得与 GCC 一起使用的预编译头 我的尝试并不顺利 也没有看到很多关于如何设置它的好例子 我试过了Cygwin https en wikipedia org wiki CygwinGCC 3 4 4 并使用 4 0Ubuntu htt
  • 如何查看 SVN 工作副本中每个文件的修订号?

    我与另一位开发人员在同一个工作副本中工作 我知道这是一个坏主意 我们通常会更新单个文件 现在我们有一些版本中的文件和另一个版本中的其他文件 如何查看包含各自修订号的文件列表 工作副本位于 Linux 机器中 我们使用 svn 命令行 预先感
  • GCC 4.7/4.8 作为 Xcode 的 C/C++ 编译器

    我现在正在开发一个 C 项目 我希望使用 C 11 功能 在这个项目中 我正在使用该库NTL用于数论的东西 由于 Xcode 具有舒适自动完成功能 我使用 Xcode 编写代码 并且 NTL 库与标志 lntl 静态链接 现在 我希望使用一
  • 32 位 x86 汇编中堆栈对齐的职责

    我试图清楚地了解谁 调用者或被调用者 负责堆栈对齐 64 位汇编的情况相当清楚 它是由caller 请参阅系统 V AMD64 ABI 第 3 2 2 节栈帧 输入参数区域的末尾应按 16 对齐 32 如果 m256 在堆栈 字节边界上传递
  • 未定义的行为或误报

    我 基本上 在野外遇到过以下情况 x x 5 显然 它可以在早期版本的 gcc 下编译干净 在 gcc 4 5 1 下生成警告 据我所知 警告是由 Wsequence point 生成的 所以我的问题是 这是否违反了标准中关于在序列点之间操

随机推荐