LINUX.ORG.RU

какую подключить библиотеку для read в gcc


0

0

Здравствуйте,

я вообще практически ничего не писал под gcc так что вопрос совершенно ламерский.

возникла ошибка линковки gcc при использовании в программе ф-ции read

выглядит следующим образом:

gcc main.o -Wall -O2 -o main

undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status

я так понял, что нужно подключить соотв. библиотеку, но я не знаю какую именно. подобрать перебором не получилось :)

подскажите как узнать какую библиотеку требует какая-либо в функция - в man'е об этом не говорится или хотя бы какую библиотеку требует ф-ция read (write, open, close из unistd.h)

Заранее спасибо.

anonymous

Ответ на: Re: какую подключить библиотеку для read в gcc от anonymous

Re: какую подключить библиотеку для read в gcc

Так у тебя на С++ исходник? Тогда "g++ main.cpp -o main". Если на С, то просто "gcc main.cpp -o main". И ничего вручную линковать не надо, glibc по умолчанию добавляется редактором связей.

anonymous ()
Ответ на: Re: какую подключить библиотеку для read в gcc от anonymous

Re: какую подключить библиотеку для read в gcc

c g++ все заработало. спасибо. а почему такой код выдает ошибку линковки на gcc?

#include <unistd.h>

int main(int argc, char** argv) { char c; read(STDIN_FILENO, &c, 1);

return 0; }

anonymous ()

Re: какую подключить библиотеку для read в gcc

спасибо большое, что не поленились и проверили. у меня работает ваш пример, и я понял свою ощибку:

если вы измените main.c на main.cpp (или, например, на main.qwe) и откомпилите, то опять появится эта ошибка.

т.е. получается, что gcc нормально работает только с файлами *.c

еще остался один вопрос: как мне узнать, что какие-то ф-ции требуют подключения отдельных библиотек? (как, например, pthread_*) есть ли какой-то общий способ?

anonymous ()
Ответ на: Re: какую подключить библиотеку для read в gcc от anonymous

Re: какую подключить библиотеку для read в gcc

Потому что когда мы компилируем файл C++ (а файлы с суффиксом .cpp по умолчанию рассматриваются именно так, независимо от того запускаем ли мы gcc или g++), нам всегда нужен C++ runtime library -- просто компилятор автоматически вставляет references на некоторые вещи. g++ по сути просто автоматически прилинковывает libstdc++, т.е. g++ -o main main.cpp грубо говоря эквивалентен gcc -o main main.cpp -lstdc++. (Заметим, что для подключения библиотеки используется ключ -l + остаток имени библиотеки после libc. Так что gcc -glibc -- это просто некорректный вызов)

По поводу второго вопроса: ежели программа не линкуется, то функции, которые перечислены как undefined reference находятся в отдельных библиотеках. В каких именно -- можно узнать, почитав документацию.

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