Всех приветствую!
Обнаружилось непонятное явление: после компиляции mingw32 и запуска под wine в программе не инициализируются глобальные переменные.
Более подробно:
Глобальные переменные:
bool line_mode = false;
enum {ORTHOGRAPHIC=0, PERSPECTIVE};
int projection_type=ORTHOGRAPHIC;
Некоторые ф-ции:
void reshape_cb (int w, int h)
{
glViewport ( 0, 0, (GLint) w, (GLint) h ) ;
WIDTH = w;
HEIGHT = h;
printf("projection_type = %d\n", projection_type);
printf("line_mode = %d\n", line_mode);
switch ( projection_type )
{
case PERSPECTIVE:
printf("PERSPECTIVE\n");
...
break;
case ORTHOGRAPHIC:
printf("ORTHOGRAPHIC\n");
...
break;
};
...
CHECK_GL_ERROR();
printf("reshape()\n");
}
void keyboard_cb ( unsigned char key, int x, int y )
{
switch ( key )
{
case 'l' :
case 'L' :
{
line_mode = !line_mode;
break;
}
case '1' :
{
projection_type = ORTHOGRAPHIC;
reshape_cb(WIDTH, HEIGHT);
break;
}
case '2' :
{
projection_type = PERSPECTIVE;
reshape_cb(WIDTH, HEIGHT);
break;
}
...
};
glutPostRedisplay();
}
После запуска wine program.exe на экран выдается
projection_type = -1122261533
line_mode = 100
reshape()
При компиляции gcc все нормально:
projection_type = 0
line_mode = 0
ORTHOGRAPHIC
reshape()
Лечится это явление добавлением static:
static bool line_mode = false;
enum {ORTHOGRAPHIC=0, PERSPECTIVE};
static int projection_type=ORTHOGRAPHIC;
(или, возможно, инициализацией в ф-ции main) Тогда правильно работает и после mingw.
Кто-нибудь сталкивался с таким явлением? Почему это происходит?
Добавление.
Если после запуска wine program.exe нажать клавишу [2], то
projection_type = -1122261533
line_mode = 100
reshape()
НАЖАТИЕ КЛАВИШИ [2]
projection_type = 1
line_mode = 100
PERSPECTIVE
reshape()
видно значение projection_type инициализировалось как и задумано.
Тоже самое после gcc: ./program
projection_type = 0
line_mode = 0
ORTHOGRAPHIC
reshape()
НАЖАТИЕ КЛАВИШИ [2]
projection_type = 1
line_mode = 0
PERSPECTIVE
reshape()
PS Заранее благодарю за осмысленные ответы.
PS2 К сожалению, сделать маленький пример на выдачу этой ошибки пока не удалось. А вываливать кучу файлов сюда неуместно. Могу exe-шник дать для анализа явления.