По некоторым причинам я должен использовать 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-встроенный, но никакая удача.
Действительно ли возможно сделать gcc для не использования _alloca? (или скорректируйте порог?)
Лучше всего скомпилировать весь код на VC ++. Если это невозможно ..
Вам следует использовать mingw gcc вместо cygwin. Он предназначен для вывода кода, который будет связан со средой выполнения VC ++, а не с библиотеками cygwin. В частности, он вызовет функцию времени выполнения VC ++ __chkstk вместо __alloca.
Вы можете просто написать свою собственную процедуру _alloca и связать ее с ней. Взгляните на исходный код библиотеки gcc, чтобы узнать, что она должна делать.
Похоже, _alloca устарел Microsoft и больше не входит в их библиотеки времени выполнения после VS2005. Новые библиотеки времени выполнения поддерживают _malloca .
Ваши варианты не подходят. Вместо этого вы можете попробовать собрать VS2005. Возможно, у cygwin есть опция, в которой вы можете сказать, что используете новую библиотеку времени выполнения (и если они еще не поддерживают ее, вы можете отправить ее как запрос функции).