ошибка компиляции файла на Ubuntu которой не было на macos
Собираю библиотеку, при выполнении цели test ошибка error: implicit declaration of function ‘ck_assert_double_eq’; did you mean ‘ck_assert_uint_eq’? На macos до этого всё собралось, помогите, пожалуйста, понять, в чем дело.
Makefile
CC = gcc
S21_MATH_C = s21_*.c
S21_MATH_O = s21_*.o
CFLAGS = -Wall -Wextra -Werror -std=c11
CCOV = -fprofile-arcs -ftest-coverage
COVFLAGS = --coverage
LDFLAGS = -lgcov
TFLAGS = -lcheck
#ASAN = -g -fsanitize=address
all: clean test s21_math.a gcov_report
s21_math.a: $(S21_MATH_C)
$(CC) $(CFLAGS) -c -g $(S21_MATH_C)
ar rcs s21_math.a $(S21_MATH_O)
ranlib s21_math.a
test_math.o: test_math.c
$(CC) $(ASAN) $(CFLAGS) -c test_math.c
test: s21_math.a test_math.o
$(CC) $(ASAN) $(CCOV) test_math.o s21_math.a -o test $(TFLAGS)
./test
gcov_report: s21_math.a test_math.o
$(CC) $(ASAN) $(GFLAGS) $(CCOV) -g test_math.c $(S21_MATH_C) s21_math.a -L. s21_math.a $(TFLAGS) -o ./htmlreport.out
./htmlreport.out
lcov -t "htmlreport" -o test.info -c -d .
genhtml -o report test.info
check:
cppcheck --enable=all --force *.h *.c
CK_FORK=no leaks --atExit -- ./test
cp ../materials/linters/CPPLINT.cfg CPPLINT.cfg
python3 ../materials/linters/cpplint.py --extension=c *.c
# valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=RESULT_VALGRIND.txt ./test
clean:
rm -rf *.o *.a *.css *.html *.gcno *.gcda *.out *.info test report *.dSYM
rebuild: clean all
test_maht.c
#include <check.h>
#include <math.h>
#include <stdio.h>
#include "s21_math.h"
START_TEST(fabs1) {
double zero = 0;
ck_assert_double_eq(s21_fabs(-15896547832.251478956),
fabs(-15896547832.251478956));
ck_assert_double_eq(s21_fabs(1.0), fabs(1.0));
ck_assert_double_eq(s21_fabs(15896547832.251478956),
fabs(15896547832.251478956));
ck_assert_double_eq(s21_fabs(0.1), fabs(0.1));
ck_assert_double_eq(s21_fabs(0.741852963321654987),
fabs(0.741852963321654987));
ck_assert_double_eq(s21_fabs(-99999.9999999), fabs(-99999.9999999));
ck_assert_double_eq(s21_fabs(zero), fabs(zero));
}
END_TEST
START_TEST(pow1) {
double zero = 0;
double one = 1;
ck_assert_double_eq_tol(s21_pow(2.2, 2.2), pow(2.2, 2.2), 16);
ck_assert_double_eq_tol(s21_pow(1.0, 5), pow(1.0, 5), 16);
ck_assert_double_eq_tol(s21_pow(7832.2514, 2.36), pow(7832.2514, 2.36), 16);
ck_assert_double_eq_tol(s21_pow(0.1, 2), pow(0.1, 2), 16);
ck_assert_double_eq_tol(s21_pow(0.7418, 8.1), pow(0.7418, 8.1), 16);
ck_assert_double_eq_tol(s21_pow(-99999.9999999, -6), pow(-99999.9999999, -6),
16);
ck_assert_double_eq_tol(s21_pow(zero, one), pow(zero, one), 16);
ck_assert_double_eq_tol(s21_pow(5.2, 0.5), pow(5.2, 0.5), 16);
ck_assert_double_eq_tol(s21_pow(5.2, -3), pow(5.2, -3), 16);
ck_assert_double_eq_tol(s21_pow(5.2, 0), pow(5.2, 0), 16);
ck_assert_double_eq_tol(s21_pow(0, 1), pow(0, 1), 16);
}
END_TEST
START_TEST(sqrt1) {
ck_assert_double_eq_tol(s21_sqrt(2.2), sqrt(2.2), 16);
ck_assert_double_eq_tol(s21_sqrt(1225.36987), sqrt(1225.36987), 16);
ck_assert_double_eq_tol(s21_sqrt(0.259814), sqrt(0.259814), 16);
ck_assert_double_eq_tol(s21_sqrt(0), sqrt(0), 16);
ck_assert_double_nan(s21_sqrt(-2.2));
}
END_TEST
int main(void) {
Suite *s1 = suite_create("Core");
TCase *tc1_1 = tcase_create("Core");
SRunner *sr = srunner_create(s1);
int nf;
suite_add_tcase(s1, tc1_1);
tcase_add_test(tc1_1, fabs1);
tcase_add_test(tc1_1, pow1);
tcase_add_test(tc1_1, sqrt1);
srunner_run_all(sr, CK_ENV);
nf = srunner_ntests_failed(sr);
srunner_free(sr);
return nf == 0 ? 0 : 1;
}
Ответы (3 шт):
Автор решения: eri
→ Ссылка
ck_assert_double_eq и тп находятся в /usr/include/check.h которого нет. Он в пакете check. Установите его sudo apt install check
Автор решения: Olga
→ Ссылка
оказалось в убунту 20.04 check версии 0.10, в библиотеке просто не было необходимых функций. Проблема решена обновлением ОС. Большое всем спасибо за ответы!
Автор решения: Amazomic
→ Ссылка
Привет Студентам Школы 21 от Казанского кампуса)
мне помогли эти команды:
sudo apt update && sudo apt upgrade
потом
do-release-upgrade
