#c #gcc #make #cs50
Почему у меня не определяется string s = GetString();? hell.c #include#include int main(void) { printf("State our name: "); string s = GetString(); printf("hello, %s\n", s); } cc hell.c -o hell /tmp/ccHZXs2m.o: In function `main' hell.c:(.text+0x16): undefined reference to `GetString' collect2: error: ld returned 1 exit status make: *** [hell] Error 1
Ответы
Ответ 1
Почему бы тебе не воспользоваться методом scanf() для чтения с консоли? int main(void) { string name; printf("Введите ваше имя"); scanf("%s", name); printf("Привет, %s\n!", name); return 0; }Ответ 2
Нужно скомпилировать и слинковать с файлом cs50.c cc -c help.c -o help.o cc -c cs50.c -o cs50.c cc -o help help.o cs50.oОтвет 3
Потому что у тебя нету такой функции GetString(). Добавь например выше.. string GetString(void) { return "test"; }Ответ 4
Могу предположить, что у вас слетели или не были настроены переменные среды CFLAGS и LDLIBS. Попробуйте создать в этой же папке файл с названием makefile и поместить в него данные строки: CC=clang CFLAGS=-ggdb3 -O0 -std=c99 -Wall -Werror LDLIBS=-lcs50 -lm После чего просто вызовите make: make hell for ABC ;)Ответ 5
Потому что cs50 это библиотека курса гарварда cs50. А у Вас она не установлена. Запустите в их удаленной линуксовой среде и там подцепится.Ответ 6
Используйте консоль в редакторе (отдельная иконка рядом с gedit). Тогда независимо от того, подключите ли вы библиотеку string.h или нет, функция GetString сработает.Ответ 7
.h файл только декларирует список функций, для их использования в программу должен быть вкомпилирован их код находящийся скорее всего в .cшных файлах (но может оказаться в .asm .haskell ... .lib .dll .so .a) в самом простейшем случае у вас где-то должен лежать файл cs50.c, который тоже нужно скомпилировать: gcc -o ./hello[.exe] hello.c cs50/lib/src/cs50.c PS: описание принципа использования модулей, раздельной компиляции и использования ключевого слова static неплохо объяснено в курсе Евгения ЛинскогоОтвет 8
В окружении CS50 на c9.io начиная с 2016 эту функцию переименовали в: get_string() Используйте её или найдите более свежие видео-лекции.Ответ 9
Потому, что ты не читал нормально начало к заданиям - ТАМ ТАК ЖИРНО написано ЦТ Дополнительные материалы reference.cs50.net/ — разъяснение функций библиотек, используемых во время обучения. На английском. http://computer.howstuffworks.com/c.htm стр. 11 – 14 и 39 И вот если пройти в разъяснение функций библиотек - и поискать поиском string - то будет чудо, выяснится что надо подключать библиотеку string.h - а она не прописана в cs50 - ребята не на все делали костыль! Зачем костыль на библиотеку готовую?
Комментариев нет:
Отправить комментарий