LINUX.ORG.RU

C compiler cannot create executables


0

0

такую ошибку выдаёт configure в gentoo при попытке что либо собрать. пробовал gcc-config - все нормально, профиль стоит какой и нужно. гуглил, искал здесь, нашел часто повторяющееся - установить libc6-dev \ glib-devel, но таких пакетов в дереве нет и у glibc нет use-флага «dev».

если сделать export CC=g++, то картина несколько меняется:

checking for C compiler default output filename ... a.out
checking whether the C compiler works ...
configure: error: cannot run C compiled programs

ещё советуют поставить libstdc++ v3, но её установка также кончается неудачей. как пришёл к жизни такой - уже не помню, кажется после пересборки мира.

★★★★★

>кажется после пересборки мира.

точнее после того, как с помощью gcc 4.4.4 не смог пересобрать его же самого, по нагугленным советам установил libstdc++ и снёс её ввиду бесполезности. примерно после этого всё и перестало собираться.

jcd ★★★★★
() автор топика

Попробуй вручную приветмир собрать и запустить.

Кстати, какие-нибудь разделы смонтированы с noexec?

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

делал, более того gcc-config -f сам запускает env-update. gcc-config -l выдает один-единственный профиль со звёздочкой (якобы выбран)

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

noexec нигде нет. сборка идёт в /var/tmp/portage, пробовал создать там приветмир:

#include <stdio.h>
int main()
{
    printf("yea");
    return 0;
}

gcc -o hello hello.c
после чего ld выдает:
ld: warning: cannot find entry symbol _start; defaulting to 00000000004003b0
и приветмир сегфолтится при запуске.

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

да, в этой же папке создал простой баш-скрипт и он запустился - что подтверждает отсутствие noexec при монтировании.

jcd ★★★★★
() автор топика

> configure: error: cannot run C compiled programs

Такое бывает, если компилятору передать опции, которые он не может понять. Обычно все подробности (с точным сообщением об ошибке) лежат в configure.log или его местном аналоге.

sjinks ★★★
()

У меня такое было после удаления dev-libs/mpfr, так что попробуй этот пакет переставить, как бинарный, потому что собрать ты его не сможешь. :)

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

> -mssse3
не-не-не - ты его не путай!
нет тут лишних букафков

megabaks ★★★★
()

выхлоп маленький - обычно после этого написано где косяк
зря удалил libstdc++
и да - где флаги? не вижу...

megabaks ★★★★
()

Попробуй таки CFLAGS подрезать.

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

и рядом стоит комп с офтопиком, на котором каждый день кубэйс вгоняет оный офтопик в ступор...или бсод
офтопик готов? )

megabaks ★★★★
()

хорошо поломали, настолько хорошо, что впору пересобирать весь тулчейн

checking whether the C compiler works ...

configure: error: cannot run C compiled programs



обычно это флаги, но судя по опыту того что сломан hello world, сломан тулчейн


ещё советуют поставить libstdc++ v3


это виртуальный пакет (кроме libstdc++.so.5 - для старых бинарников)
ставится оно вместе с gcc

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

соберите еще раз

gcc -v -o hello hello.c


вывод сюда

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

sse3 - streaming simd extensions v 3 (NOCONA)
ssse3 - second streaming simd extensions 3 ( CORE2 conroe )

все нормально

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

удаление mpfr скорее приведет к тому что GCC перестанет запускаться. у jcd он запускается и компилит hello world как минимум, но вот результат поломаный.

Искать конечно можно долго, но лучше переставить glibc binutils и gcc,
делать это придется либо бинарными пакетами , либо еще каким либо образом, потому что текущая система что-либо собирать не в состоянии

Sylvia ★★★★★
()

еще вопрос:

насколько я поняла используется архитектура amd64

multilib присутствует? , USE покажите


и USE для GCC ( emerge -pv gcc )

Sylvia ★★★★★
()

>установить libc6-dev \ glib-devel, но таких пакетов в дереве нет и у glibc нет use-флага «dev».

Может надо почитать в целом о различиях source-based и binary-based дистрибутивов? О философии. Чушь порете полную. И CFLAGS советую поставить с вики и оставить их в покое, +50% производительности не получите никак.

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

интересно было бы посмотреть на генту без dev пакетов )

хотя принципиально такая кастомная сборка возможна, emerge способен работать с бинарными пакетами , но это уже из разряда очень специализированных решений и подразумевает что binhost собирающий пакеты будет иметь все полноценно

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

Дженту с бинарными самосборными пакетами — довольно экстримальное решение. Проще воспользоваться другим дистрибутивом и наладить сопровождение необходимых версий нужных пакетов.

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

я не назову его экстремальным,
если имеется хотя бы 2 инсталляции gentoo, особенно в варианте быстрый-медленный (десктоп-нетбук например), то вполне возможно десктоп использовать как binhost, а на слабую машину ставить практически только бинарные пакеты, естественно что побочными эффектами такого решения станут одинаковость USE флагов (все несоответствующее придется пересобирать на слабой машине, хорошо если это только видео драйвер к примеру, хотя dev компоненты уже не снести будет), а также подгонка CFLAGS под наиболее архаичный вариант, хотя даже на x86 допустим -march=pentium4 -msse2 все равно будет намного лучше чем -march=i486 или -march=i686

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

>это просто всё от неумения, вантуз не терпит дилетантов
ну хз-хз
впрочем компа того не касаюсь...

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

paludis вроде не умеет бинарные пакеты (: Так-то в принципе можно, но USE флаги как правило живут своей жизнью, что на ноуте, что на десктопе.

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

>Такое бывает, если компилятору передать опции, которые он не может понять

я отключил все оптимизации, оставил в CFLAGS голый march=native, бесполезно

У меня такое было после удаления dev-libs/mpfr


стоит 2.4.1_p5

выхлоп маленький - обычно после этого написано где косяк


пересмотрел все выхлопы - нигде ничего не видать. протранслировать их сюда не могу, так как пишу из винды - под рукой даже убунты нет, чтобы оттуда chroot сделать

gcc обновлял


при обновлении по сути - следовал инструкции, но потом не особо задумываясь захотел пересобрать его самим собой с новыми флагами :(

это виртуальный пакет (кроме libstdc++.so.5 - для старых бинарников)


по крайней мере когда я захотел его поставить - оно было ещё не установлено и долго пыхтело при сборке

вывод сюда


не смогу (см вверх) - но там ничего не было кроме вышеприведённой строчки, изучил вдоль и поперёк.

используется архитектура amd64


да

multilib присутствует


да

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

>USE для GCC

graphite gtk mudflap multilib nls nptl openmp

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

через quickpkg можно сделать, и без portage (хотя portage лучше всё-таки оставить, есть пакеты, явно от него зависящие)

anonymous
()
Ответ на: комментарий от jcd

посмотри ldd hello-word/ ldd gcc hello-world.c -o hello-world, получишь список библиотек. Посмотри ls-ом (ls -lr , по дате) или через equery b /usr/lib64/libblablabla.so, отсортируй список пакетов/либ по дате и ищи в районе той даты, когда сломалось. Переставь, как советуют, gcc binutils libc из бинарных пакетов или из tinderbox.

Такое бывает, если компилятору передать опции, которые он не может понять

такое бывает из-за милиона причин. Тупо может места не хватать под временные файлы, может что-то сломаться в ABI зависимостях тулчейна, и т.п.

anonymous
()

вот во избежание сего чуда стОит держать system в бинарниках :)

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

> ld: warning: cannot find entry symbol _start; defaulting to 00000000004003b0

_start ЕМНИП относится к C runtime, libc. Cломался либо libc (пакет glibc), либо ld(binutils), либо gcc, либо что-то по ldd зависимостям. Посмотри, что конкретно (будет поломанная зависимость в ldd), пересобери этот пакет или поставь из бинарников.

Ещё можно посмотреть лог обновлений на предмет ошибок. После какого-то обновления пакеты перестали собираться, значит — предыдущий пакет сломал сборку (или что-то ручками нахимичил). Найди такой пакет, переставь от него в обратном порядке последних штук 5 пакетов, потом возможно, сборка, заработает.

Посмотри зависимости такого пакета, сломавшего сборку, пересобери зависимости (помогает, например, когда ломается АБИ в нестабильных версиях чего-то: смотришь зависимости, пересобираешь, и если всё пересобирается ОК, система в рабочем состоянии).
Алсо, могут остутствовать некоторые версии пакетов в pkg-config (а там их может не быть из-за того, что есть /usr/lib64/libblabla.so, но нет /usr/lib64/libblabla-version.la --или может не быть ссылки в /usr/lib64/pkgconfig — тогда делаем ручками нужные симлинки или .la файл по аналогии из имеющегося)

Поставь бинарные пакеты из tinderbox: http://blog.jolexa.net/2009/03/25/gentoo-tips-to-upgrade-your-really-old-inst... или http://tinderbox.dev.gentoo.org/default-linux/amd64

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

>будет поломанная зависимость в ldd

точно, при ldd hello появляется " linux-vdso.so.1 => ", и файла с таким именем в системе нет.

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

Вообще, чем НЕ нравится мне последнее время Гента — так это тем, что там кажется, отсутствует понятие релиза для многих пакетов, но вместо этого есть куча подпорок, палок и верёвок чтобы быстро поломать и быстро починить. Обновили нестабильный libpng или openssl или zlib => пока не пересоберём все зависимости, система будет в нерабочем состоянии из-за поломанного ABI.

Обновили стабильную/нестабильную версию на live/scm/-9999 — 1) и имеем скрытую зависимость LIVE пакета от конкретной версии его зависимостей — то он может не пересобираться с другими версиями других пакетов (и придётся и их варианты ставить scm версии) 2) по-уму, SCM версия должна ставиться в отдельный слот В общем, держать много версий SCM пакетов — зло. Но тогда зачем они нужны, если нужно вручную пересобирать зависимости каждый раз?

Итого, стандартными средствами системы можно легко привести её в нерабочее состояние. Благо что, обычно понятно что и где ломается и что и где надо пересобрать

Вот Nix пакетный менеджер в этом смысле концептуально более правильная вещь — можно поставить бок-о-бок 9500 вариантов всего, и оно не сломается.

anonymous
()
Ответ на: комментарий от Sylvia

linux-vdso.so.1 => (0x00007fff875ff000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4af7b9e000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4af7824000)
/lib64/ld-linux-x86-64.so.2 (0x00007f4af7dbb000)

подобный вывод будет весьма нормальный
linux-vdso.so.1 -> адрес в памяти

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

_start предоставляется
/usr/lib(64)/*crt*.o файлами, это glibc
хотя в случае multilib , может быть возможет и косяк ldscripts ( binutils )


вообщем переставлять: glibc binutils gcc

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

ps: бинарными пакетами поделиться не могу , т.к. у меня ~x86 , а не amd64

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

в общем эта сисема у меня всё равно была экспериментальной, поэтому легче будет заново переставить её из stage3 и в следующий раз пользоваться инструкцией по обновлению gcc (раньше даже не знал о её существовании).

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

всем огромное спасибо!

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

Это анстейбл. Проблемные либы откатываются и маскируются. Ужимки по уживанию в системе libpng-1.4 и прочего хлама меня искренне забавляют. LIVE пакеты в портежах все замаскированы, не понимаю откуда такая проблема вообще может взяться.

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

Я не фанатик, чтобы портаж с концами сносить (: quickpkg не в курсе как с палудисом, да и бинарные пакеты мне толком не нужны, на днях приедет новый ноут, там будет core i5, хоть обкомпеляйся.

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

неосилятор?
и да - в других дистрах проблем гораздо больше - и конфликты и отсутствие свободы выбора версии и многое другое....

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