如何在没有_alloca的情况下编译GCC?

时间:2010-02-27 16:59:50

标签: visual-c++ gcc alloca

出于某种原因,我应该使用gcc编译一个C文件,然后链接到Visual C ++ 2008项目。

(我使用了当前最新的gcc版本:cygwin gcc 4.3.4 20090804。)

但是有一个问题:gcc总是用_alloca分配一个大数组,

和VC链接器无法解析符号__alloca。

例如,

int func()
{
    int big[10240];
    ....
}

此代码产生了_alloca依赖性,尽管我没有明确地调用_alloca函数。

(数组大小很重要。如果我改变10240 - > 128,一切都好)

我尝试了gcc选项-fno-builtin-alloca或-fno-builtin,但没有运气。

是否可以让gcc不使用_alloca? (或调整门槛?)

4 个答案:

答案 0 :(得分:7)

最好的办法是用VC ++编译所有代码。如果那是不可能的..

您应该使用mingw gcc而不是cygwin。它旨在输出将与VC ++运行时链接的代码,而不是cygwin库。特别是,它将调用VC ++运行时函数__chkstk而不是__alloca。

答案 1 :(得分:3)

您可以编写自己的_alloca例程并链接到该例程。查看gcc库源代码,看看它应该做什么。

答案 2 :(得分:1)

看起来_alloca已被Microsoft弃用,并且在VS2005之后不再位于其运行时库中。较新的运行时库支持_malloca

你的选择看起来不太好。您可以尝试使用VS2005进行构建。也许cygwin有一个选项,你可以告诉它你正在使用一个更新的运行时库(如果他们还不支持,你可以将它作为一个功能请求提交)。

答案 3 :(得分:0)