- gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Re: gcc: ошибка сегментирования
- Ошибка сегментирования
- Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Re: Ошибка сегментирования (APT)
- Ошибка сегментирования Ubuntu
- Что такое ошибка сегментации?
- Почему возникает ошибка сегментации?
- Что делать если возникла ошибка сегментирования?
- Выводы
gcc: ошибка сегментирования
Использую RH7б 2.6.22 Скомпилил программу без хитрых опций gcc 4.1.1, всё собралось ок.
Запуская программу, система пишет «ошибка сегментирования». Что это значит? Как локализовать ошибку?
Re: gcc: ошибка сегментирования
Re: gcc: ошибка сегментирования
Re: gcc: ошибка сегментирования
телепаты в отпуске, давай сорсы. Ищи траблы с указателями/переполнениями/etc 🙂
Re: gcc: ошибка сегментирования
Это значит, что твоя программа полезла в чужой сегмент памяти. Возможно из-за кривого указателя, выхода за предел массива etc.
Re: gcc: ошибка сегментирования
> Как локализовать ошибку?
Re: gcc: ошибка сегментирования
Сорцы простые printf( «ddd\n» ); return( 0 ) Правда ещё включается масса *.h файлов из Minix3 и после return( 0 ) идёт код.
Мне кажется компилятор сделал бинарник, который операционка выполнить не может. Мне не понятно почему. Хитрых опций при компиляции нет.
Создаётся ощущение, что есть в *.h файлах миникса заданы препроцессорные директивы, которые заставляют gcc создавать не вменяемый бинарник. Может я ошибаюсь, толкните на путь истинный.
Re: gcc: ошибка сегментирования
Кажется понял где копать. Всем спасибо за наводку.
Re: gcc: ошибка сегментирования
/usr/bin/ld: errno: TLS definition in /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libc.a(errno.o) section .tbss mismatches non-TLS reference in /tmp/ccoXDU8m.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libc.a: could not read symbols: Bad value collect2: выполнение ld завершилось с кодом возврата 1
Re: gcc: ошибка сегментирования
Нету функции collect2 в библиотеки libc.a
ld не может собрать бинарник
Re: gcc: ошибка сегментирования
В исходниках нет ссылки на collect2
Re: gcc: ошибка сегментирования
Что такое «section .tbss mismatches non-TLS reference in»?
Ни когда не встречал такой ошибки.
Re: gcc: ошибка сегментирования
Re: gcc: ошибка сегментирования
Он разве не находит тредовые функции? Он вроде не чтото другое ругается.
Re: gcc: ошибка сегментирования
> Он разве не находит тредовые функции? Он вроде не чтото другое ругается.
Ты физик что ли?
Что bt на корке показывает?
Re: gcc: ошибка сегментирования
С этим разобрался, gcc -o всё собирает. Прога стартует.
Теперь пытаюсь собирать с gcc -c затем ld На этапе линковки ld пишет:
/usr/bin/ld: errno: TLS definition in /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libc.a(errno.o) section .tbss mismatches non-TLS reference in /tmp/ccoXDU8m.o /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libc.a: could not read symbols: Bad value collect2: выполнение ld завершилось с кодом возврата 1
Re: gcc: ошибка сегментирования
А исходники попостить, раз они такие простые — принципиально нельзя? Телепаты и правда в отпуске.
Очевидно или с либами вашими что-то не то или юзаете вы их как-то не так.
Re: gcc: ошибка сегментирования
>Очевидно или с либами вашими что-то не то или юзаете вы их как-то не так.
Источник
Ошибка сегментирования
Имеется убунта 10,10 с Гномом и нуб (то бишь я 😉 ) перед ней.
Нужно поставить софтину для прототипирования\проектирования интерфейса результаты из которой можно передавать «QT-4 кодеру».
Я поставил qt4 дизайнер (из установщика приложений. т.е. из оф. репов). А он, зараза, не стартует. И никаких признаков не подаёт. В var/log/ ничего относящееся к нему не вижу (а мб неправильно смотрю?).
При запуске из консоли вижу — ошибка сегментирования.
Чё делать, куда копать? Нужно или альтернатива или починить эту софтину.
Полный лог запуска из консоли в студию.
Это и был полный:
ошибка сегментирования
sudo apt-get install gdb
gdb имяпрограммы
run
bt full
strace и gdb в помощь
Какая версия? Попробуй поставь из ppa (или paa, как его там?) или собери из исходников.
Что-то прояснилось? (я ничего не понимаю)
ЗЫ. Сплойлер на форуме не работает..
Пардон, не всё.. дальше:
Другие KDE-программы запускаются?
Этот бектрейс нужно отправить разработчикам (посмотрите на https://wiki.ubuntu.com/Apport или воспользуйтесь reportbug).
Да. Крусайдер юзаю во всю. И несколько др. тоже работают (их ставил давно)
Кстати, после установки дизайнера в курсайдере (и в др КДЕ-шных) немного поменялся фейс — иконки, комобоксы, кнопки. Причем как-то выборочно. Не то что бы сильно напрягает, но как-то.. некомфортно..
Этот бектрейс нужно отправить разработчикам
О как! Что ж, отправим. Только боюсь реакция будет долгой.. А мне вот надо товарищу, осваивающему питон (на qt4) фейс будущей софтины нарисовать.. На чем еще можно — кто-нить в курсе? (гипм, диа и тп не предлагать. Интересует спец софт.)
Источник
Ошибка сегментирования (APT)
В общем имеется вдс с дебианом(etch), со вчерашнего дня при попытке как либо заюзать apt-get (or aptitude) выдает «ошибка сегментирования». пример: stvlad:/home/stvad# aptitude Ouch! Got SIGSEGV, dying.. Ошибка сегментирования либо же в случае с апт гетом stvlad:/home/stvad# apt-get install subversion Ошибка сегментирования. 0% подскажите в чем дело? и как это исправить..
Re: Ошибка сегментирования (APT)
что перед этим менялось? попробуй почистить кеш апта и заново apt-get update сделать.
Re: Ошибка сегментирования (APT)
щас попробую, отпишусь что менялось точноне помню помню поставил питон, htop, mc.
Re: Ошибка сегментирования (APT)
Re: Ошибка сегментирования (APT)
ldd `which aptitude`
Или это не бинарник?
Re: Ошибка сегментирования (APT)
вообще то бинарник )
На Ленни выдаст вот
$ldd `which aptitude`
linux-gate.so.1 => (0xffffe000)
libapt-pkg-libc6.7-6.so.4.6 => /usr/lib/libapt-pkg-libc6.7-6.so.4.6 (0xb7e63000)
libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7e25000)
libsigc-2.0.so.0 => /usr/lib/libsigc-2.0.so.0 (0xb7e1e000)
libcwidget.so.3 => /usr/lib/libcwidget.so.3 (0xb7d5a000)
libept.so.0 => /usr/lib/libept.so.0 (0xb7c99000)
libxapian.so.15 => /usr/lib/libxapian.so.15 (0xb7b43000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7b30000)
libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7b18000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7a32000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7a09000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb79fc000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb78a7000)
libutil.so.1 => /lib/i686/cmov/libutil.so.1 (0xb78a3000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb789e000)
/lib/ld-linux.so.2 (0xb7f47000)
Re: Ошибка сегментирования (APT)
удалил кеш. загрузило индексы и снова выдало ошибку сигментирования.
Re: Ошибка сегментирования (APT)
попробуйте сделать strace на аптитуду, хоть видно будет на загрузке какого файла оно падает
Re: Ошибка сегментирования (APT)
Признавайся, добавлял репозитарии Lenny или Sid?
Re: Ошибка сегментирования (APT)
признаюсь добавлял и работало))) потом перестало((( в них причина?
Re: Ошибка сегментирования (APT)
ну и надо было перееждать на ленни уже.
Источник
Ошибка сегментирования Ubuntu
Не всегда программы в Linux запускаются как положено. Иногда, в силу разных причин программа вместо нормальной работы выдает ошибку. Но нам не нужна ошибка, нам нужна программа, вернее, та функция, которую она должна выполнять. Сегодня мы поговорим об одной из самых серьезных и непонятных ошибок. Это ошибка сегментации Ubuntu. Если такая ошибка происходит только один раз, то на нее можно не обращать внимания, но если это регулярное явление нужно что-то делать.
Конечно, случается эта проблема не только в Ubuntu, а во всех Linux дистрибутивах, поэтому наша инструкция будет актуальна для них тоже. Но сосредоточимся мы в основном на Ubuntu. Рассмотрим что такое ошибка сегментирования linux, почему она возникает, а также как с этим бороться и что делать.
Что такое ошибка сегментации?
Ошибка сегментации, Segmentation fault, или Segfault, или SIGSEGV в Ubuntu и других Unix подобных дистрибутивах, означает ошибку работы с памятью. Когда вы получаете эту ошибку, это значит, что срабатывает системный механизм защиты памяти, потому что программа попыталась получить доступ или записать данные в ту часть памяти, к которой у нее нет прав обращаться.
Чтобы понять почему так происходит, давайте рассмотрим как устроена работа с памятью в Linux, я попытаюсь все упростить, но приблизительно так оно и работает.
Допустим, в вашей системе есть 6 Гигабайт оперативной памяти, каждой программе нужно выделить определенную область, куда будет записана она сама, ее данные и новые данные, которые она будет создавать. Чтобы дать возможность каждой из запущенных программ использовать все шесть гигабайт памяти был придуман механизм виртуального адресного пространства. Создается виртуальное пространство очень большого размера, а из него уже выделяется по 6 Гб для каждой программы. Если интересно, это адресное пространство можно найти в файле /proc/kcore, только не вздумайте никуда его копировать.
Выделенное адресное пространство для программы называется сегментом. Как только программа попытается записать или прочитать данные не из своего сегмента, ядро отправит ей сигнал SIGSEGV и программа завершится с нашей ошибкой. Более того, каждый сегмент поделен на секции, в некоторые из них запись невозможна, другие нельзя выполнять, если программа и тут попытается сделать что-то запрещенное, мы опять получим ошибку сегментации Ubuntu.
Почему возникает ошибка сегментации?
И зачем бы это порядочной программе лезть, куда ей не положено? Да в принципе, незачем. Это происходит из-за ошибки при написании программ или несовместимых версиях библиотек и ПО. Часто эта ошибка встречается в программах на Си или C++. В этом языке программисты могут вручную работать с памятью, а язык со своей стороны не контролирует, чтобы они это делали правильно, поэтому одно неверное обращение к памяти может обрушить программу.
Почему может возникать эта ошибка при несовместимости библиотек? По той же причине — неверному обращению к памяти. Представим, что у нас есть библиотека linux (набор функций), в которой есть функция, которая выполняет определенную задачу. Для работы нашей функции нужны данные, поэтому при вызове ей нужно передать строку. Наша старая версия библиотеки ожидает, что длина строки будет до 256 символов. Но программа была обновлена формат записи поменялся, и теперь она передает библиотеке строку размером 512 символов. Если обновить программу, но оставить старую версию библиотеки, то при передаче такой строки 256 символов запишутся нормально в подготовленное место, а вот вторые 256 перезапишут данные программы, и возможно, попытаются выйти за пределы сегмента, тогда и будет ошибка сегментирования linux.
Что делать если возникла ошибка сегментирования?
Если вы думаете, что это ошибка в программе, то вам остается только отправить отчет об ошибке разработчикам. Но вы все-таки еще можете попытаться что-то сделать.
Например, если падает с ошибкой сегментации неизвестная программа, то мы можем решить что это вина разработчиков, но если с такой ошибкой падает chrome или firefox при запуске возникает вопрос, может мы делаем что-то не так? Ведь это уже хорошо протестированные программы.
Первое, что нужно сделать — это обновить систему до самой последней версии, возможно, был баг и его уже исправили, а может у вас установлены старые версии библиотек и обновление решит проблему. В Ubuntu это делается так:
Если это не помогло, нужно обнулить настройки программы до значений по умолчанию, возможно, удалить кэш. Настройки программ в Linux обычно содержатся в домашней папке, скрытых подкаталогах с именем программы. Также, настройки и кэш могут содержаться в каталогах
/.cache. Просто удалите папки программы и попробуйте снова ее запустить. Если и это не помогло, вы можете попробовать полностью удалить программу, а потом снова ее установить, возможно, какие-нибудь зависимости были повреждены:
Если есть возможность, попробуйте установить программу из другого источника, например, не из PPA, а более старую версию, из официальных репозиториев.
Когда вы все это выполнили, скорее всего, проблема не в вашем дистрибутиве, а в самой программе. Нужно отправлять отчет разработчикам. В Ubuntu это можно сделать с помощью программы apport-bug. Обычно Ubuntu предлагает это сделать сразу, после того как программа завершилась с ошибкой сегментирования. Если же ошибка сегментирования Ubuntu встречается не в системной программе, то вам придется самим искать разработчиков и вручную описывать что произошло.
Чтобы помочь разработчикам решить проблему, недостаточно отправить им только сообщение что вы поймали Segmentation Fault, нужно подробно описать проблему, действия, которые вы выполняли перед этим, так чтобы разработчик мог их воспроизвести. Также, желательно прикрепить к отчету последние функции, которые вызывала программа (стек вызовов функций), это может очень сильно помочь разработчикам.
Рассмотрим, как его получить. Это не так уж сложно. Сначала запустите вашу программу, затем узнайте ее PID с помощью команды:
Дальше запускаем отладчик gdb:
Подключаемся к программе:
После подключения программа станет на паузу, продолжаем ее выполнение командой:
Затем вам осталось только вызвать ошибку:
И набрать команду, которая выведет стек последних вызовов:
Вывод этой команды и нужно отправлять разработчикам. Чтобы отключиться от программы и выйти наберите:
Дальше остается отправить отчет и ждать исправления ошибки. Если вы не уверены, что ошибка в программе, можете поспрашивать на форумах. Когда у вас есть стек вызовов, уже можно попытаться, если не понять в чем проблема, то попытаться узнать, не сталкивался ли с подобной проблемой еще кто-то.
Выводы
Теперь у вас есть приблизительный план действий, что нужно делать, когда появляется ошибка сегментирования сделан дамп памяти ubuntu. Если вы знаете другие способы решить эту проблему, напишите в комментариях!
Источник