5

何らかの理由で、gccを使用してCファイルをコンパイルしてから、Visual C++2008プロジェクトにリンクする必要があります。

(私は現在の最新のgccバージョン:cygwin gcc 4.3.4 20090804を使用しました。)

ただし、問題が1つあります。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++でコンパイルすることです。それが不可能な場合..

cygwinではなくmingwgccを使用する必要があります。cygwinライブラリではなく、VC++ランタイムに対してリンクされるコードを出力するように設計されています。特に、__allocaの代わりにVC++ランタイム関数__chkstkを呼び出します。

于 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 に答える