math.h препраща към грешка при компилиране на LinSched 3.3 под 64-битов Ubuntu12.04

Компилирането на LinSched 3.3 под 64-битов Ubuntu-12.04 ми извежда следните грешки:

******/home/xxxxx/Desktop/linsched_3.3/tools/linsched/tests/linsched_rand_test.c:169: undefined reference to `sqrt'
collect2: ld returned 1 exit status
make[1]: [linsched_rand_test] Error 1
make[1]: Leaving directory `/home/jianguo/Desktop/linsched_3.3/tools/linsched/tests'
make: [all] Error 2*

Изглежда, че има проблем при препратка/връзка към math.h, който е: math: /usr/include/math.h

От make файла на LinSched 3.3, CFLAGS и LFLAGS се дефинират както следва,

    CC = ${CROSS_COMPILE}gcc

    CFLAGS = -g -O2 -m64 -D__KERNEL__ -D__LINSCHED__ -Wall -Wundef -Wstrict-prototypes \
         -Werror-implicit-function-declaration -fno-common \
         -I${LINSCHED_DIR}/include  -I${LINUXDIR}/include \
         -I${LINUXDIR}/arch/linsched/include -I${LINSCHED_DIR}/ \
             -include ${LINSCHED_DIR}/include/generated/autoconf.h \
         -Wno-pointer-sign -include ${LINUXDIR}/include/linux/kconfig.h

    CFLAGS_LINUX = $(CFLAGS) -nostdinc -isystem $(shell $(CC) -print-file-name=include) \
               -include ${LINSCHED_DIR}/linux_linsched.h \
               -Wno-unused  -Wno-strict-aliasing

    LFLAGS = -lm
....
...
...
 LD_PERCPU = ${LD} -r -T ${LINSCHED_DIR}/linsched.lds

OBJ_FILES = ${LINSCHED_OBJS} ${LINUX_OBJS}
DEPS := ${OBJ_FILES:.o=.d}
-include ${DEPS}

TIME_HDR=${LINUXDIR}/kernel/timeconst.h
${TIME_HDR}: ${LINUXDIR}/kernel/timeconst.pl
    @echo "(Generating timeconst.h)"
    @perl ${LINUXDIR}/kernel/timeconst.pl 1000 > $@

${LINUX_OBJS}: %.o: %.c ${TIME_HDR}
    @echo "CC KERNEL $<"
    @${CC} -o $@ ${CFLAGS_LINUX} -c $< -MMD

%.o: %.c
    @echo "CC SIM $<"
    @${CC} ${CFLAGS} -o $@ -c $< -MMD

Някой в ​​мрежата предложи да се добави -lm в CFLAGS, опитах се да вмъкна параметъра -lm на няколко места в CFLAGS, но същите грешки продължават. Някаква идея ???

Между другото, компилирах LinSched 3.3 под 64-битов ubuntu, защото в CFLAGS е конфигуриран като -m64. И предишна компилация под 32-битов Ubuntu ми извежда грешка за несъвместимост на данните (между elf64-x86-64 и elf32-i386)

Както беше предложено от @another.anon.coward, проверих как се използва LFLAG по-късно и открих, че се използва многократно. Като решение, как трябва да променя makefile, за да добавя параметъра LFLAGS???


person coder    schedule 06.02.2013    source източник
comment
(Тук се прави предположение) Трябва да добавите математическата библиотека към опциите на линкера. Как се използва LFLAGS в make-файла по-късно? Има ли LDFLAGS в make-файла?   -  person another.anon.coward    schedule 06.02.2013
comment
@another.anon.coward Мисля, че разбирате. LFLAGS всъщност не се използва по-късно...   -  person coder    schedule 06.02.2013
comment
@another.anon.coward Изброих останалата част от make-файла, както може да се види, LFLAGS никога не се използва. За да добавите математическата библиотека към опциите на Linker? как трябва да се модифицира makefile?   -  person coder    schedule 06.02.2013
comment
Да, трябва да добавите флагове за свързване, докато свързвате. Въпреки това изглежда, че сте намерили решение. Може би можете да публикувате същото и да приемете това като решение, така че да може да помогне на други в бъдеще, които може да се сблъскат със същия проблем.   -  person another.anon.coward    schedule 18.02.2013


Отговори (1)


Всъщност проблемът беше, че флагът за свързване ${LFLAGS} беше използван неправилно в /tools/linsched/tests/Makefile.

Ето корекцията, която коригира проблема с компилацията, свързан с връзката към математическата библиотека за linsched:

 diff --git a/tools/linsched/tests/Makefile b/tools/linsched/tests/Makefile
index 91bb8eb..8074c93 100644
--- a/tools/linsched/tests/Makefile
+++ b/tools/linsched/tests/Makefile
@@ -33,7 +33,7 @@ TEST_DEPS := ${TESTS:%=%.d}
${TESTS}: ${OBJ_FILES} [email protected]
        @echo CC TEST $@
        @${LD_PERCPU} -o [email protected] $^
-       @${CC} ${LFLAGS} -o $@ [email protected] -MMD
+       @${CC} -o $@ [email protected] ${LFLAGS} -MMD
        @rm [email protected]

clean:
person Shahed Molla    schedule 30.12.2015