首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与g++ 4.6混合使用的g++ 4.1.2

与g++ 4.6混合使用的g++ 4.1.2
EN

Stack Overflow用户
提问于 2012-07-18 02:46:12
回答 1查看 1.7K关注 0票数 2

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

有没有可能这样做:

代码语言:javascript
复制
gcc-4.6 -o test.cpp.o -c test.cpp
gcc-4.1.2 -o exec_test test.cpp.o

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 00:06:27

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

只要你从GCC 4.6 (也就是libstdc++.so.6.0.16)链接到libstdc++,即通过-L /path/to/gcc-4.6/lib链接,它就可以工作

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

例如:

代码语言:javascript
复制
$ 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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11528885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档