Я пытаюсь скомпилировать набор файлов с помощью созданного компилятором здесь (riscv64-linux). Однако у меня возникли некоторые проблемы, которые, как я полагаю, являются результатом моего непонимания с библиотеками.
Я включаю библиотеку libgcc в Makefile с флагом -lgcc в части LINKER_FLAGS. Однако я получаю следующий вывод:
riscv64-linux-ld: cannot find -lgcc
Когда я выполняю $ riscv64-linux-ld --verbose | grep SEARCH_DIR | tr -s ' ;' \\012
, чтобы увидеть, где riscv64-linux-ld ищет библиотеки, я получаю несколько путей. Один из них /home/luna/noelv-buildroot/output/host/riscv64-buildroot-linux-musl/lib"
.
Однако, когда я вижу содержимое этого пути, я могу найти библиотеку libgcc:
$ ls /home/luna/noelv-buildroot/output/host/riscv64-buildroot-linux-musl/lib
ldscripts libatomic.la libatomic.so.1 libgcc_s.so
libatomic.a libatomic.so libatomic.so.1.2.0 libgcc_s.so.1".
Это заставляет меня задуматься:
Означает ли это, что библиотека находится по этому пути?
Как я могу добавить путь к SEARCH_DIR этого компилятора?
Я думал, что это может произойти, потому что ему нужна статическая библиотека. Для этого я попытался слинковать статическую библиотеку libgcc (libgcc.a), добавив в Makefile
LINKER_INCLUDES = -L/home/laumecha/noelv-buildroot/output/host/lib/gcc/riscv64-buildroot-linux-musl/8.3.0/
, где по этому пути мы можем найти libgcc.a. Почему компоновщик все еще не находит -lgcc?Когда я добавляю
LINKER_FLAGS += -lm -static -lgcc -nostartfiles -L/home/luna/noelv-buildroot/output/build/host-gcc-final-8.3.0/build/riscv64-buildroot-linux-musl/libgcc/
к флагам компоновщика, я получаю несколько неопределенных ссылок:
riscv64-linux-ld: /home/luna/multibench_automotive_2.0.2653/builds/riscv64/riscv-gcc64/obj/mith.a(th_al.o): in function `al_printf':
/home/luna/multibench_automotive_2.0.2653/mith/al/src/th_al.c:505: undefined reference to `vsscanf'
riscv64-linux-ld: /home/luna/multibench_automotive_2.0.2653/builds/riscv64/riscv-gcc64/obj/mith.a(th_al.o): in function al_sprintf':
/home/luna/multibench_automotive_2.0.2653/mith/al/src/th_al.c:523: undefined reference to `vfscanf'
riscv64-linux-ld: /home/luna/multibench_automotive_2.0.2653/builds/riscv64/riscv-gcc64/obj/mith.a(th_al.o): in function al_fcreate':
/home/luna/multibench_automotive_2.0.2653/mith/al/src/th_al.c:664: undefined reference to `strchr'
riscv64-linux-ld: /home/luna/multibench_automotive_2.0.2653/builds/riscv64/riscv-gcc64/obj/mith.a(th_al.o): in function `al_fsize':
/home/luna/multibench_automotive_2.0.2653/mith/al/src/th_al.c:693: undefined reference to `stat'
riscv64-linux-ld: /home/luna/multibench_automotive_2.0.2653/mith/al/src/th_al.c:714: undefined reference to `getenv'
Означает ли это, что я успешно подключил библиотеку, и мне не хватает другой?
ПРИМЕЧАНИЕ. Я не помещал код из Makefile, потому что понимаю, что моя проблема связана с моими базовыми концепциями, а Makefile был создан на каком-то официальном сайте.