Gnus
написал 14 октября 2005 года в 21:15 (970 просмотров)
Ведет себя
неопределенно; открыл 16 тем в форуме, оставил 26 комментариев на сайте.
Странное дело: при написании прог на С++ с использованием классов и libX11 они (проги) отказываются линковаться, при этом матерятся так:
/tmp/cco3fOno.o(.eh_frame+0×11): undefined reference t `__gxx_personality_v0\′
collect2: ld returned 1 exit status
Самое смешное то, что если писать на простом Си(без объектов) — всё нормально, равно как и на С++, но без Иксов.
Используются gcc 3.2 и binutils 2.12
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
Приведи, пожалуйста, полный пример: код, компиляционную команду и ошибку.
У меня такого никогда не было, возможно ты не совсем правильно линкуешь (надо -lX11 тоже, например).
Good Luck,
UT
В самом простом случае это выглядит так:
#include
#include
class Win {
public:
int x,y;
void Open(void);
private:
Display *d;
};
void Win::Open(void)
{
d=XOpenDisplay(NULL);
if(d==NULL)
{
puts(«ошибка»);
return;
}
}
int main(int argv,char *argc[])
{
Win *w;
w->x=3;
w->y=2;
w->Open();
return 0;
}
Компилируем:
gcc -L /usr/X11R6/lib -lX11 tmp.cpp
Получаем:
/tmp/cczOfjUh.o(.eh_frame+0×11): undefined reference to `__gxx_personality_v0\′
collect2: ld returned 1 exit status
во-во! да! я вчерась буквально наткнулся на такую же ошибку. В программке гораздо проще — она была чуть навороченнее чем hello-world. Причём любопытно то, что если компилировать не так:
а так:
то всё работает.
Я вообще C++ не пользуюсь — просто хотел какое-то его свойство проверить. И тут такой бонус.
Есть у меня смутные подозрения, что когда я полгода назад развлекался с установкой и переустановкой gcc что-то я перемудрил. В конечном-то итоге я вернулся к версии кот. с дистром идёт (прямо с диска дистра и поставил, командой install-pkg), но видать что-то перемудрил. Плюс я не помню как я сносил результаты своих экспериментов.
Более того, могу сказать следующее, сейчас компилировал программку hello-world, очевидного содержания…
команда:
приводит к ошибке. А команды
нет.
Попробовал — скомпилилось. Уже обрадовался было, но выяснилось, что при вызове метода нарушается сегментация. Может исходник бажный?
а лучше
учите мат часть!
Я кстати с самого начала так и делал, но при компиляции обычным способом (gcc а не g++) вылезали какие-то синтаксические ошибки, и пришлось поставить указатель. Может это из той же оперы, что и ошибка линковщика?
gcc и g++ это разные вещи. Указатель, и указатель на созданный класс это разные вещи. Перед тем, как использовать не самый простой framework Xlib, необходимо хоть что-нибудь прочитать по C++.
Еще разок, для догоняющих : «учите мат часть!»
Гениально просто, почему был segmentation fault.
decvar пишет, что в коде:
Win *w = new Win(); <———-
надо заменить на это:
Win win;
а Gnus в своём исходнике:
Win *w;
тем самым создавая указатель, но не выделяя памяти оператором new!