5

出于某种原因,我应该使用 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

4 回答 4

7

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

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

于 2010-02-27T18:59:38.087 回答
3

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

于 2010-02-27T18:23:47.213 回答
1

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

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

于 2010-02-27T20:30:48.170 回答
0

一些相关的讨论:

于 2010-05-27T17:49:46.023 回答