Как GCC компилировать без _alloca? - PullRequest
5 голосов
/ 27 февраля 2010

По какой-то причине я должен использовать 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 ]

7 голосов
/ 27 февраля 2010

Лучше всего будет скомпилировать весь код с помощью VC ++. Если это невозможно ..

Вы должны использовать mingw gcc вместо cygwin. Он предназначен для вывода кода, который будет связан со средой выполнения VC ++, а не с библиотеками cygwin. В частности, он будет вызывать функцию времени выполнения VC ++ __chkstk вместо __alloca.

3 голосов
/ 27 февраля 2010

Вы можете просто написать свою собственную процедуру _alloca и сделать ссылку на нее. Посмотрите на исходный код библиотеки gcc, чтобы увидеть, что он должен делать.

1 голос
/ 27 февраля 2010

Похоже, _alloca устарела Microsoft и больше не входит в их библиотеки времени выполнения после VS2005. Более новые библиотеки времени выполнения поддерживают _malloca .

Ваши варианты выглядят не очень хорошо. Вы можете попробовать построить с VS2005 вместо этого. Возможно, у cygwin есть опция, в которой вы можете указать, что используете более новую библиотеку времени выполнения (и если они еще не поддерживают ее, вы можете подать ее как запрос функции).

0 голосов
/ 27 мая 2010
...