LINUX.ORG.RU

Переход с GNU GCC 2.96 на GNU GCC 3.2.2


0

0

Есть программа, написанная на С++ собранная на RH7.2 компилятором GNU GCC 2.96(G++). Отлажена и прекрасно работает. Примерный код

class t_01 {...} c_01;

class t_02 {... обращение к объекту c_30} c_02;

...

class t_30 {...} c_30;

Попытался пересобрать в RH9.0 (компилятор GNU GCC 3.2.2). Неужели, всего пара warnings о строковых константах. Запускаю - не работает. Проставляю в конструкторы отладку и вижу, что ранее сначала отрабатывали все конструкторы , а потом по таймеру с_02 вызывал метод с_30, а в новой версии компилятора это происходит пошагово т.е. создается объект с_02, запускает таймер, вызывает метод с_30 , а объект не проинициализирован (переменная видна , а конструктор не отработал).

Это по логике верно. Но почему это сходило с рук в GCC 2.96(G++)? Эту проблему я решил простым перемещением с_30 вверх. Но программа все равно не работает.(использую сокеты, потоки).

Может кто уже сталкивался с этой проблемой? Или есть какие-то опции компилятора?

Как вариант временного решения сейчас пробую прикрутить к RH9.0 GNU GCC 2.96.

anonymous

Не верю ! (c) Текст кастрированного но илюстрирующего описанную ситуацию примера в студию !!!

anonymous
()

Попробуй в описании класса для c_02 использовать не сам c_03 а указатель на него

anonymous
()

Слышь, а у тебя глобальные переменные, или как? Ты что-то не договариваешь. По стандарту сказано, что глобальные - на усмотрение компилятора.

Если нет, то пиши конкретнее вопрос, ок? :)

Spectr ★★★
()

Ах, да.

У тебя точно глобальные переменные..

Старый добрый C синтаксис. Забей ты на него, а?

Spectr ★★★
()
Ответ на: комментарий от Spectr

Дальнейшее исследование показало ошибку при работе с семафорами :

sem_t sem_a; sem_t sem_b; pthread_t thread_id1;

void tn_tp(Void) { sem_wait(&sem_b); ..... };

t_06::t_06() { sem_init(&sem_a,0,0); sem_init(&sem_b,0,0); pthread_create(&thread_id1,NULL,&tn_tp,NULL); };

int main () { запуск таймера на процедуру где последний оператор - sem_post(&sem_b);

sem_wait(&sem_a); return -1; };

Причем sem_a больше не где не задествовано. Должен висеть мёртво. А он проваливается на return;

Повторяю в RH7.2 всё работает. В RH9.0 нет. (пробовал static sem_t sem_a; - не помогает)

Может у кого есть какие мысли?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.