所以,这里的东西。 为了开发在Linux上的玛雅的插件,我们与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
我严重怀疑这将是可能的,但值得一问。
如果这是不可能的,有没有办法实现类似的东西?
所以,这里的东西。 为了开发在Linux上的玛雅的插件,我们与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
我严重怀疑这将是可能的,但值得一问。
如果这是不可能的,有没有办法实现类似的东西?
在ABI对于这两个版本的GCC是兼容的,问题是由GCC 4.6编译的目标可能取决于只能由较新的海湾合作委员会的C中定义的符号++标准库(例如,如果您使用std::fstream
构造采取std::string
的对象将在该符号上,这是只有在GCC的最新版本,支持C ++ 11本的依赖)。
它将从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