Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc g++;4.1.2与g和x2B混合+;4.6_Gcc_G++_Version - Fatal编程技术网

Gcc g++;4.1.2与g和x2B混合+;4.6

Gcc g++;4.1.2与g和x2B混合+;4.6,gcc,g++,version,Gcc,G++,Version,事情是这样的。要在Linux上开发Maya插件,我们必须使用GCC4.1.2进行编译。但是这个编译器不支持任何新的C++0x特性 是否可以这样做: gcc-4.6 -o test.cpp.o -c test.cpp gcc-4.1.2 -o exec_test test.cpp.o 我严重怀疑这是否可能,但值得一问 如果这是不可能的,有没有办法实现类似的事情? < P>这两个GCC版本的ABI是兼容的,问题是GCC 4.6编译的对象可能依赖于仅由新的GCC的C++标准库定义的符号。(例如,如果

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

是否可以这样做:

gcc-4.6 -o test.cpp.o -c test.cpp
gcc-4.1.2 -o exec_test test.cpp.o
我严重怀疑这是否可能,但值得一问


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

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

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

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

例如:

$cat x.cc
#包括
#包括
#包括
int main()
{
std::string s=“输出”;
流f(s)的std::;
std::向量v(3);
int n;
用于(自动i:v)
++n;

f这肯定不会起作用。即使是一个简单的Hello World应用程序也不能正确链接。我猜这两个版本之间的链接太多了,能够正确地链接。如果开发的代码可以避免C++支持库,那么编译程序可能会有一些成功(<代码> GCC—S/<代码>)。,而不是使用旧的gcc组装输出。它适用于4.7->4.4,使用
auto
关键字进行测试。@fork0,不需要这样做that@Oli,你真的试过了吗?一个简单的hello world不会依赖于GCC 4.1的libstdc++中没有的任何东西,而且链接会很好,甚至不会像我的asnwer.sweet!as s中那样指定更新的libstdc++这么简单吗?我想在某些情况下,它会稍微复杂一些。您的第二个命令所做的就是调用链接器,
ld
,因此只要您告诉链接器如何找到正确的lib,那么无论您是通过GCC4.1还是通过4.6调用
ld
,还是直接作为
ld