由于某些原因,我应该用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,一切正常)
我尝试过-fno-builtin-alloca或-fno-builtin选项-fno-builtin,但没有成功。
有没有可能让gcc不使用_alloca?(或调整阈值?)
发布于 2010-02-28 02:59:38
最好的做法是使用VC++编译所有代码。如果这不可能的话..
你应该用mingw的,而不是cygwin的。它的设计目的是输出将链接到VC++运行时的代码,而不是cygwin库。特别是,它将调用VC++运行时函数__chkstk,而不是__alloca。
发布于 2010-02-28 02:23:47
您可以编写自己的_alloca例程并链接到该例程。看看gcc库的源代码,看看它应该做些什么。
发布于 2010-02-28 04:30:48
看起来_alloca已经被微软弃用了,并且在VS2005之后不再出现在他们的运行时库中。较新的运行时库支持_malloca。
你的选择看起来不太好。您可以尝试使用VS2005进行构建。也许cygwin有一个选项,你可以告诉它你正在使用一个较新的运行时库(如果他们还不支持,你可以将其作为功能请求提交)。
https://stackoverflow.com/questions/2348172
复制相似问题