出于某种原因,我应该使用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? (或调整门槛?)
答案 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)