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
Ответ на: комментарий от anonymous

>glibc

таже самая ошибка может я не правильно задаю параметры?

gcc main.cpp -c -o main.o gcc main.o -glibc -o main

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

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

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

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

#include <unistd.h>

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

return 0; }

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

[keiko@localhost tmp]$ cat 15.c
#include <unistd.h>

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

return 0; }
[keiko@localhost tmp]$ gcc -o 15 15.c
[keiko@localhost tmp]$ ./15
ww
[keiko@localhost tmp]$

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

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

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

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

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

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

Потому что когда мы компилируем файл 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.