gpt4 book ai didi

gcc - g++ 4.1.2 与 g++ 4.6 混合

转载 作者:行者123 更新时间:2023-12-04 05:38:59 26 4
gpt4 key购买 nike

所以,事情就是这样。要在 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++ manual 中列出的方法之一告诉动态加载器使用该库。

例如:

$ 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

关于gcc - g++ 4.1.2 与 g++ 4.6 混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11528885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com