Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/16: Рейтинг темы: голосов - 16, средняя оценка - 4.56
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442

Какой-то баг в GCC

17.08.2009, 10:20. Показов 3623. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Переставил FreeBSD с 6 на 7.
После этого перестала линковаться программа - компилируется без ошибок, но линковщик пишет
/var/tmp//ccsaOcQc.o(.gnu.linkonce.t._ZN7CCookie7S etListERKSsS1_+0x66): In function `CCookie::SetList(std::string const&, std::string const&)':
: undefined reference to `CCookie::week4'
/var/tmp//ccsaOcQc.o(.gnu.linkonce.t._ZN7CCookie7S etListERKSsS1_+0x70): In function `CCookie::SetList(std::string const&, std::string const&)':
: undefined reference to `CCookie::whileOpen'
/var/tmp//ccsaOcQc.o(.gnu.linkonce.t._ZN7CCookie5W riteEv+0x2a8): In function `CCookie::Write()':
: undefined reference to `CCookie::year4'
/var/tmp//ccsaOcQc.o(.gnu.linkonce.t._ZN7CCookie5W riteEv+0x2b2): In function `CCookie::Write()':
: undefined reference to `CCookie::week4'
В одном классе было три константы
C++
1
2
3
    static const long week4=3600*24*7*4;
    static const long year4=week4*52;
    static const long whileOpen=-1;
Пришлось вынести их в глобальные.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.08.2009, 10:20
Ответы с готовыми решениями:

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать 32 разрядный GCC. Но на моей основной машине установлена 64...

Какой GCC+MinGW нужно устанавливать?
У меня Убунта 14.04 64 разрядная, в списке дистрибутив компиляторов много, какой из них выбрать и как для С? gcc-mingw-w64: GNU C...

Какой-то БАГ с цветовой палитрой !?!?!
В дизайнере когда выбираю цвета для оформления любого объекта у меня палитра цветовая (имею ввиду цветные квадратики в выпадающем окошке)...

21
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
17.08.2009, 10:29
здорово. люблю читать мысли вслух.
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 10:53  [ТС]
Цитата Сообщение от zim22 Посмотреть сообщение
здорово. люблю читать мысли вслух.
не вслух, а в пост

Ну ладно, поставлю вопрос
- Где баг? В мозгах, иль GCC?

"Раньше" компилировалось
0
depict1
 Аватар для zim22
281 / 146 / 4
Регистрация: 11.07.2009
Сообщений: 606
17.08.2009, 10:57
Цитата Сообщение от skvor Посмотреть сообщение
Ну ладно, поставлю вопрос
большое спасибо

Цитата Сообщение от skvor Посмотреть сообщение
- Где баг? В мозгах, иль GCC?
в мозгах. даю гарантию 99.999999999%
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 11:22  [ТС]
Цитата Сообщение от zim22 Посмотреть сообщение
в мозгах. даю гарантию 99.999999999%
Некоторые разработчики OpenBSD, например Тэо де Раадт и Отто Мёрбек (Otto Moerbeek), критикуют GCC, называя его «громоздким, глючным, медленным, и генерирующим плохой код.»

Теперь, надо уточнить - в какой (чьей) извилине
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.08.2009, 11:56
Цитата Сообщение от skvor Посмотреть сообщение
Теперь, надо уточнить - в какой (чьей) извилине
ну значит в ваших.
skvor, ты же сам сказал
Цитата Сообщение от skvor Посмотреть сообщение
После этого перестала линковаться программа
а раз раньше линковалась, то проблема не в GCC.
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
17.08.2009, 12:02
Че-то недокомпилял. Где-то код думает, что искать бывших мемебров нужно в классе. Или неправильно вынес из класса его элементы.
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 12:26  [ТС]
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
а раз раньше линковалась, то проблема не в GCC.
Проблема возникла после смены версии FreeBSD.

Ладно, тему можно слегка прикрыть, пойду курить GCC.
Но если кто-то сталкивался с подобным - пишите.

Всем спасибо.

Добавлено через 1 минуту 30 секунд
Цитата Сообщение от Vourhey Посмотреть сообщение
Или неправильно вынес из класса его элементы.
Тогда бы ругнулся компилятор.
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.08.2009, 12:30
Цитата Сообщение от skvor Посмотреть сообщение
Тогда бы ругнулся компилятор.
а он что не "ругнуется"? По-моему он явно говорит: не определена ссылка undefined reference to CCookie::week4 в функции CCookie::SetList(std::string const&, std::string const&)
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
17.08.2009, 12:35
Тогда бы ругнулся компилятор.
Это от ошибки зависит.

Добавлено через 35 секунд
Проблема возникла после смены версии FreeBSD.
ты же выше написал, что ты еще вынес из класса константы.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.08.2009, 12:37
Скажи, какая версия gcc была на старой и на новой системе? Наверняка продвинулись немало. С GCC ситуация следующая: "старые" версии gcc (ещё чуть ли не с версии 2.95) очень фривольно работали со стандартом Си++, при этом куча ситуация, являющихся с точки зрения стандарта некорркектными, считались правильными и для них генерился код. А начиная с версии 3.0 и по сей день они от этих косяков избавляются и компилятор становится всё более и более строгим (т.е. разрешает всё меньше и меньше запрещённых ситуаций)

В твоём случаее скорее всего получилось так, что код у тебя был некорректным (с точки зрения стандарта), но "старый" gcc его ел, а "новый" - уже нет. Поэтому не имея исходников врядли кто-то тут тебе поможет. Либо на новую систему ставь ту же версию gcc, что была раньше
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 12:46  [ТС]
Цитата Сообщение от Vourhey Посмотреть сообщение
ты же выше написал, что ты еще вынес из класса константы.
Таки прально, если константы в классе - компилятор не ругается, но линковщик их не видит, я потанцевал с бубном - вынес эти три константы в глобальные - линковщик всё нормально собирает.
А до смены версии BSD, всё нормально было - никто не был против статических констант в классе.

Сейчас состряпал такой пример, с теми же константами (строки 34-36), он нормально работает - и компилируется и линкуется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <string>
#include <fstream>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/param.h>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <fcntl.h>
#include <openssl/md5.h>
 
long n;
class CCookie
{ private:
    std::string     LoginMark() { return "l"; }
    void Set(const std::string &Name,const std::string &Value,const long MaxAge=whileOpen)
    { if (0);
      else {}
    }
  public:
    static const long week4=3600*24*7*4;
    static const long year4=week4*52;
    static const long whileOpen=-1;
    std::string Write()
    { long period;
      if (n>week4)
      { Set(LoginMark(),"456",week4);
        for (int i=0; i<2 ; ++i)
           if (0) Set("time","789",1?year4:week4);
      }
      return "a=999";
    }
} Cookie;
 
int main(int argc, char *argv[], char *env[])
{ n=123;
  std::cout<<Cookie.Write();
  return 0;
}
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.08.2009, 12:49
Лучше напиши пример, который не линкуется. Правильно поставленный вопрос - это уже половина ответа
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 13:01  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Лучше напиши пример, который не линкуется.
Увы, но нелинкующийся пример - 350К текста.
Боюсь, если выложу, меня все сожрут

Какая версия GCC не знаю, буду разбираться, но думаю дело не в стандартах - тоже но порезаное работает, компилятор не ругается. А гемор только с этими константами и только в конкретной программе. Наверное, надо чёнить обновить.

Дцать лет назад имел аналогичный баг в TP7.0 - программа неправильно работала со строкой (ошибалась адресом), "вылечил" введением лишней переменной.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.08.2009, 13:09
Учись сокращать пример. Потому как строить догадки в возхдухе - неблагородное занятие. У меня есть одна мысль, но если она не прокатит - значит разбираться рпидётся тебе самому

У тебя в *.h файле наверняка написано:

C++
1
2
3
4
5
6
7
class CCookie
{
...
  public:
    static const long week4=3600*24*7*4;
    static const long year4=week4*52;
    static const long whileOpen=-1;
Попробуй вместо этого:

C++
1
2
3
4
5
6
7
8
// Это в файле *.h
class CCookie
{
...
  public:
    static const long week4;
    static const long year4;
    static const long whileOpen;
C++
1
2
3
4
// А это в файле *.cpp, где реализованы методы класса CCokie
const long CCookie::week4=3600*24*7*4;
const long CCookie::year4=week4*52;
const long CCookie::whileOpen=-1;
0
 Аватар для Monte-Cristo
2816 / 1408 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
17.08.2009, 13:11
Цитата Сообщение от skvor Посмотреть сообщение
Увы, но нелинкующийся пример - 350К текста.
Боюсь, если выложу, меня все сожрут
в архив и Attach к форуму.
0
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 13:24  [ТС]
Evg, спасибо, помогло!
Правда, я заголовочные файлы не пишу, но вынос "реализации" за пределы класса, действительно, оказался хоть и бубном, но эффективным.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.08.2009, 13:27
Это не бубен, это по ГОСТу так делается в общем случае. Однако для целых типов и указателей стандарт допускает такую инициализацию держать внутри описания класса
1
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
17.08.2009, 13:32  [ТС]
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
в архив и Attach к форуму.
Вi менэ пiдстрiкаете к издевательству над другими?
Кто будет читать это всё?

В общем, проблему решил на 97%, всем спасибо!

Добавлено через 3 минуты 40 секунд
Цитата Сообщение от Evg Посмотреть сообщение
по ГОСТу
Я думаю, это не ГОСТ, а, скорее, вопрос культуры.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.08.2009, 13:33
Это именно стандарт. Только что-то меня переклинило, естественно "стандарт Си++" а не "ГОСТ".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.08.2009, 13:33
Помогаю со студенческими работами здесь

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

Вирус, либо какой-то странный баг
Здравствуйте. Возникла у меня очень странная ситуация. После случайного времени (иногда неделя, иногда день), пропадает доступ в инет. Если...

Выпадающее меню не получается, какой-то баг SOS
Помогите пожалуйста, пытаюсь писать меню для сайта. Все получилось, а сделать выпадающий список - нет. Может кто шарит как исправить?...

Как под Windows 10 установить GCC 8.1 и подцепить его к какой-нибудь вменяемой IDE?
Есть ли какая-нибудь возможность безболезненно подружить этих двух зверей? Имеется в виду наличие какого-нибудь user-friendly...

Как вообще такое может быть, это просто супер баг какой-то
Есть программа, результат выполнения отладочных строк procedure spervogo; var counter1, counter2,counter1R, counter2R, y : integer; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru