[c++] поясните дураку плиз ошибки
-lm добавь
-lm забыл
мля, опередил
Так -lm ведь, вроде, должен иметь значение на этапе линковки, а ошибки выдает компилятор? Или я не прав?
/var/tmp//cc36jRY2.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
"g++" вызывай или "gcc -x c"
наверное, ты не так компилируешь
сейчас с g++ сделаю
ага, пашет, спасибо!
а можешь рассказать теперь, что это было?
2Отцы: так мне кто-нибудь ответит?
В gcc компилятор (точнее, фронтэнд) вызывает линкер при необходимости.
Это от отсутствия -lm:
/var/tmp//ccB7wbAy.o(.text+0x28d): undefined reference to `rint'
/var/tmp//ccB7wbAy.o(.text+0x2cc): undefined reference to `log'
/var/tmp//ccB7wbAy.o(.text+0x2e7): undefined reference to `log'
/var/tmp//ccB7wbAy.o(.text+0x307): undefined reference to `log'
/var/tmp//ccB7wbAy.o(.text+0x322): undefined reference to `log'
/var/tmp//ccB7wbAy.o(.text+0x337): undefined reference to `rint'
Это от компиляции плюсового кода (автоопределение по расширению) с помощью gcc:
/var/tmp//ccB7wbAy.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
Линковщику передаётся не тот набор используемых библиотек (сишный вместо плюсового).
Обходится (кроме переименования исходника) или явным указанием языка (-x c
или компиляцией с помощью g++, чтобы линкеру сообщить все необходимые параметры.
Уже второй раз вижу, что ты постишь программу на языке це, а в сабжекте пишешь ++.
Это не С, по крайней мере не ANSI.
каюс =)
Покажи, плиз, что там не удовлетворяет стандарту ISO9899 ?
но думаю, что как минимум комментарий //
Даже гур иногда посылают в FAQ.
Ну это ж новомодная штука, а раньше компилировали как C++, для того чтобы получать // и const
Хехе раньше и прототипов не было. и функции по-другому определялись и переменные можно было только в главном блоке заводить
Ну я не про K&R всё-таки, а про нормальный ANSI C (1989г. кажется)
по крайней мере не ANSI
Вообще-то так и не стало понятно...
gcc, он что сам определиться не может, что он компилирует, C или C++?
Если он думает, что компилирует C то зачем он генерирует reference на этот gxx_personality_...,
если он думает, что компилирует С++, почему линкует c libc? Фигня какая-то...
c libc линковаться в любом случае afaik
1) Ввод-вывод printf, scanf, fopen (в С++ пользовать iostreams, cin, cout)
2) динамическая память: malloc/free ... (C++ : new/delete)
3) работа со строками strcmp, strstr, strdup,...(C++: basic_string)
перечислять всю libc я думаю не имеет смысла - это наиболее часто используемые оттуда функции и далеко не все приплюснутые насильники (с) полностью пользуются только плюсовыми методами
что-то я не понял, что ты хотел сказать этим
Есть подозрение, что и все остальное, перечисленное тож активно юзается кодом из либц.
Насколько я понимаю сисколлы в любом случае нужны. А они для юзерленд программы выглядят как функции из libc. Так что libc по-любому нужна.
Я не противопоставляю "прилинковывать/не прилинковывать libc", я противопоставляю "прилинковывать libc/libstdc++"...
По-моему дело просто в том, что в gcc указанных версий ошибка ~ фича, состоящая в том, что правила, по которым определяется язык (C/C++) отличаются на этапе компиляции и линковки. Хотя может и в чем-то другом дело... А кто-нибудь знает вообще про что этот gxx_personality? MT?
Или может кто-то считает что работа программы начинается с main?прикольная ссылка в тему
охрененная ссылка, спасибо! =)
Сцылка!
Рулеззззз!
Оставить комментарий
vlfdimir58
компилятор gcc version 3.3.3 [FreeBSD] 20031106 и gcc version 3.2.2 20030222 (ASPLinux 3.2.2-5asp)
говорят следующее:
Поясните плиз....