Я пытаюсь реплицировать песочницу CS50x в моей системе Gentoo, но я получаю такую ошибку при запуске make
% make price
cc price.c -o price
/usr/lib/gcc/x86_64-pc-linux-gnu/9.3.0/../../../../x86_64-pc-linux-gnu/bin/ld: /tmp/cc9TASaL.o: in function `main':
price.c:(.text+0x15): undefined reference to `get_float'
collect2: error: ld returned 1 exit status
make: *** [<builtin>: price] Error 1
Для справки, это источник файл:
% cat price.c
#include <stdio.h>
#include <cs50.h>
int main(void)
{
float price = get_float("What's the price?\n");
printf("Your total is %.2f (VAT included)\n", price * 1.22);
}
Я вручную установил libcs50 в своей системе:
# ldconfig -p | grep cs50
libcs50.so.10 (libc6,x86-64) => /usr/local/lib64/libcs50.so.10
libcs50.so (libc6,x86-64) => /usr/local/lib64/libcs50.so
И когда я компилирую файл с
% gcc -lcs50 price.c -o price
, я не получаю ошибок . Я что-то неправильно настроил в своей системе, или я неправильно понял, как работает make
? После просмотра лекции у меня создалось впечатление, что make
«автоматически» добавит параметр -lcs50
.
Спасибо!
РЕШЕНИЕ Установить CC
, CFLAGS
и LDLIBS
согласно этим инструкциям: https://cs50.readthedocs.io/libraries/cs50/c/. Все "автомагические" вещи в видео лекций возможны благодаря этим переменным окружения.