Связывание с Clang и слабыми символами

Я хотел бы выполнить кросс-компиляцию с целью ARM Cortex-M4 с Clang10 и использовать GCC10 (arm-none-eabi-gcc) для предоставления библиотек и заголовков. К сожалению, процесс связывания вызывает у меня головную боль. Кажется, есть проблема со слабыми определениями, экспортированными из libc_nano и libstdC++_nano. Я не могу перезаписать __assert_func или __cxa_pure_virtual, оба из которых должны (насколько мне известно) содержать слабые определения в libc_nano соответственно libstdC++_nano.

Я уже запускал оба компилятора с включенной подробной информацией для анализа вывода во время компоновки, но я не совсем уверен, что с этим делать. Единственное существенное различие, которое я заметил, это то, что GCC, кажется, сначала связывает мои библиотеки проектов, а потом свои собственные (так, например, ссылку libmylib.a перед libstdC++_nano). Также есть какое-то странное повторение двух групп, которое для меня не имеет смысла? Я всегда думал, что пара флагов "start-group -> end-group" должна разрешать за вас любые зависимости?

Вот вывод GCC

/usr/lib/gcc/arm-none-eabi/10.1.0/collect2 
-plugin /usr/lib/gcc/arm-none-eabi/10.1.0/liblto_plugin.so 
-plugin-opt=/usr/lib/gcc/arm-none-eabi/10.1.0/lto-wrapper 
-plugin-opt=-fresolution=/tmp/ccea5cKc.res 
-plugin-opt=-pass-through=-lgcc 
-plugin-opt=-pass-through=-lg_nano 
-plugin-opt=-pass-through=-lc_nano 
-plugin-opt=-pass-through=-lgcc 
-plugin-opt=-pass-through=-lc_nano 
--sysroot=/usr/arm-none-eabi 
-EL -X -o myelf 
-L/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard 
-L/usr/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard 
-L/usr/arm-none-eabi/lib/thumb/v7e-m+fp/hard -L/usr/lib/gcc/arm-none-eabi/10.1.0 
-L/usr/lib/gcc/arm-none-eabi/10.1.0/../../../../arm-none-eabi/lib 
-L/usr/arm-none-eabi/lib 
--gc-sections
my.obj
libmylib.a
-lstdc++_nano -lm 
--start-group -lgcc -lg_nano -lc_nano --end-group 
--start-group -lgcc -lc_nano --end-group
-T ldscript.ld

И вот вывод Clang

"/usr/bin/ld.lld" 
--gc-sections 
/usr/arm-none-eabi/lib/crt0.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crti.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtbegin.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtn.o 
/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/crtend.o 
--start-group -lstdc++_nano -lm -lgcc -lc_nano --end-group 
my.obj
libmylib.a
-Bstatic 
-L/usr/lib/clang/10.0.0/lib/baremetal 
-L/usr/arm-none-eabi/lib/thumb/v7e-m+fp/hard/ 
-L/usr/lib/gcc/arm-none-eabi/10.1.0/thumb/v7e-m+fp/hard/ 
-T ldscript.ld
-o myelf

0 ответов

Другие вопросы по тегам