2

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

(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版本不同造成的吗?

4

3 回答 3

2

请注意,从来没有任何官方的 GCC 2.96 版本

我们已经注意到一些 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 可能在不断变化,并且您正在遭受使用开发快照作为生产编译器的副作用。

于 2013-08-22T08:41:20.260 回答
1

一直以来,您都不能使用较旧的 G++ 进行链接,而不是用于编译任何对象或库,因此您所做的不太可能适用于任何两个 GCC 版本,尤其是非官方的、不稳定的 2.96 系列。

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

于 2013-08-22T08:47:03.340 回答
0

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

于 2013-08-22T09:03:49.940 回答