Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с запуском программы на C под Cygwin


Автор: motorway 19.1.2011, 20:36
Всем привет.
После компиляции под Windows 7 x64 программы на C, расширение .c с помощью Cygwin получается файл .exe + лежат библиотеки .dll.
gcc -msse2 -O2 -Wall -g -o progr progr.c -lgmp -lpthread -lm
Но после запуска программы выдает такого рода ошибку:
3996 exception:: handle: Exception: STATUS_ACCESS_VIOLATION
...
... Error while dumping state (probably corrupted stack)

Exception: STATUS_ACCESS_VIOLATION at eip=00401448
eax=00000003 ebx=00000003 ecx=00B01268 edx=00000010 esi=00000000 edi=0028CBF8
Stack trace:
Frame Function Args
ebp=1A5DCD58 esp=1A5DCBA0 program=C:\cygwin\home\...\..exe, pid 3996, thread unknown (0xFA8)
1A7DCD98 610E38C5 cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B
(00B6E660Stack trace:
Frame Function Args
, 000000001A5DCD58 00401448 , 00000000 (0028C9F8, 00000000, 00000000)
, 000000001A5DCD98 610E38C5 , 00B6E5D8 (00B6E5D8)
, 1A5DCDD4End of stack trace7
, 610E3810

Из-за чего это может быть, как побороть?

Автор: boostcoder 19.1.2011, 21:25
Цитата(motorway @  19.1.2011,  20:36 Найти цитируемый пост)
Из-за чего это может быть

первая и очевидная причина - корявый код.
зачем вы его в сижвине компилите? нативные вендовые компиляторы не подходят? или программа реализована для *nix ?

Автор: motorway 19.1.2011, 21:30
Код писал не я, а программист, работающий под Никсом 64 бит, а у меня Вин 7 64. Он использует некоторые библиотеки. В начале файла вот такое:
Код

#include <stdlib.h>
#include <stdio.h>
#include <inttypes.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include <gmp.h>
#include <pthread.h>
#include <unistd.h>
#include <xmmintrin.h>

Не знаю, есть ли там что-то специфическое для Никса, чего нет по Виндой, но вероятность есть. Можно ли скомпилировать код под Вин без такой ошибки с указанными условиями? Сам программист хороший.

Автор: boostcoder 19.1.2011, 21:36
Цитата(motorway @  19.1.2011,  21:30 Найти цитируемый пост)
 программист, работающий под Никсом 64 бит

теперь понятно почему вы пытаетесь скомпилить код сижвином.

из приведенных вами хидеров, только xmmintrin.h мне не знаком. остальные хидеры есть в mingw32 или собираются из исходников.

а код, я так полагаю, секретный? посмотреть его нельзя?

Автор: motorway 19.1.2011, 21:41
А что сделать с xmmintrin.h? В целом, не шарю в C, так что если подскажете, буду благодарен.
А откуда взять mingw32 и в какой программе можно скомпилить это под Вин?
Код без его разрешения не могу дать, но подозрение есть, что там что-то в функции malloc.

Автор: boostcoder 19.1.2011, 21:45
Цитата(motorway @  19.1.2011,  21:41 Найти цитируемый пост)
А что сделать с xmmintrin.h?

нужно выискать ее в инете, и попробовать собрать с помощью mingw`а.

Цитата(motorway @  19.1.2011,  21:41 Найти цитируемый пост)
А откуда взять mingw32

у меня в подписи.
вам, помимо прочего, нужно еще самому собрать libgmp. или же, могу скинуть собранную.

Цитата(motorway @  19.1.2011,  21:41 Найти цитируемый пост)
подозрение есть, что там что-то в функции malloc. 

malloc - стандартная функция. и 100% рабочая. проблема может быть в ее неправильном использовании.

но скажите, в линуксе программа работает?

Автор: motorway 19.1.2011, 21:47
Спасибо.
Да, у него работало, по крайней мере он не писал, что там было такое, хотя это и не значит, что не могло быть такого  smile 
Думаю, у него все было нормально.

Автор: motorway 19.1.2011, 22:16
Скачал с sourceforge 64-битную версию, там какой-то набор папок, и не очень понятно, что с ними делать.
crt, doc, headers, libraries, tools - оканчиваются на такие слова.
Не знаете?

Автор: boostcoder 19.1.2011, 22:17
Цитата(motorway @  19.1.2011,  22:16 Найти цитируемый пост)
Не знаете?

нет.

Автор: motorway 19.1.2011, 22:34
А в Вашей версии знаете, как компилировать? Она 64-битная?

Автор: boostcoder 19.1.2011, 22:36
Цитата(motorway @  19.1.2011,  22:34 Найти цитируемый пост)
А в Вашей версии знаете, как компилировать?

как и все исходники компилируются с помощью mingw/gcc.

Цитата(motorway @  19.1.2011,  22:34 Найти цитируемый пост)
Она 64-битная?

32ух.

а Вы уверены в том, что код написан строго для компиляции 64ех битным компилятором? это неразумно, как правило.

Автор: motorway 19.1.2011, 22:39
Там есть функции, которые не работали под 32-битной Виндоус... код в принципе рассчитан на то, что он лучше работает под 64-битной ОС. Насчет компилятора не знаю

Автор: boostcoder 19.1.2011, 22:46
Цитата(motorway @  19.1.2011,  22:39 Найти цитируемый пост)
Там есть функции, которые не работали под 32-битной Виндоус

у Вас код вообще под линукс! вендус тут при чем? Оо

Автор: motorway 19.1.2011, 22:53
Да, тут есть некоторая мешанина для меня... Я думал, что C может работать и там, и там. Сейчас пробую компилить на mingw, пока что выдает cannot find -lgmp, после некоторых еще ошибок, которые я убрал.
Поэтому сейчас качаю GMP, надеюсь, я правильно делаю, или нужно искать файл lgmp.h? Такого не нашлось

Автор: boostcoder 19.1.2011, 23:11
libgmp собранная для mingw: http://rghost.ru/4003591
просто распакуйте архив в каталог куда распаковали mingw.

Добавлено через 56 секунд
и, на этом, ошибки не закончатся.
бросьте Вы лучше эту затею ;)

Автор: motorway 19.1.2011, 23:44
Спасибо большое, скомпилилось, но программа теперь вылетает с ошибкой, показываемой "Прекращена работа программы..." в окне Windows.
Нет, бросить нельзя, это задача на миллион  smile 

Автор: boostcoder 19.1.2011, 23:51
Цитата(motorway @  19.1.2011,  23:44 Найти цитируемый пост)
но программа теперь вылетает с ошибкой, показываемой "Прекращена работа программы..."

сложно что-то порекомендовать не видя кода.

Автор: motorway 20.1.2011, 18:15
А все-таки, версия компилятора должна быть именно 64-битной, если в коде есть функции для 64-битной ОС?
Насчет функции malloc есть подозрения, что она "не возвращает 16 байтовый указатель", т.к. это характерно для SSE кода. Что обычно делают в таких случаях? Как можно ее заменить?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)