在较低版本的gcc中使用的静态库

时间:2013-08-22 08:23:55

标签: c++ c gcc static-libraries

我遇到了一个奇怪的问题。

(1)我首先通过gcc(版本2.96-110)将模块构建到静态库xxx.a。 xxx.a中的一些代码就像:

const char * const str = “hello world”
void fun()
{
printf(“%s”, str);
return;
}

(2)然后我通过gcc(版本2.96-98)将xxx.a链接到我的程序EXE。在EXE中,调用API fun()。

(3)当我运行EXE时,输出是“llo world”,而不是“hello world”。太奇怪了。

是由gcc版本的差异引起的吗?

3 个答案:

答案 0 :(得分:2)

请注意there was never any official GCC 2.96 release

  

我们注意到一些GNU / Linux发行版目前正在发布“GCC 2.96”。

     

我们想指出GCC 2.96不是正式的GCC版本,也不会有这样的版本。相反,GCC 2.96一直是我们开发分支的代号,最终将成为GCC 3.0。

GCC 3.0是一项重大工作,涉及GCC 2.95的ABI变更。由于“GCC 2.96”基于GCC 3.0开发的快照,因此ABI可能在不断变化,并且您正在遭受使用开发快照作为生产编译器的副作用。

答案 1 :(得分:1)

一直以来你不能使用旧的G ++链接而不是用来编译任何对象或库,所以你所做的不太可能适用于任何两个GCC版本,特别是不是非官方的,不稳定的2.96系列。

2013年加入我们,至少使用GCC 4.4

答案 2 :(得分:0)

看起来像堆栈损坏,可能是由非官方的GCC版本引起的。如果你有源代码,为什么不使用最新的GCC编译库?