Если я подключу gdb к приложению C и запущу источники информации, Я вижу свой файл init.c прямо вверху, за которым следуют все источники RTMS. Повторяя это для приложения C++, init.cpp не упоминается. Используя objdump для файлов exe/ELF, я вижу в debug_info и debug_str путь к init.c. Но в приложении C++ нет упоминания о пути к init.cpp.
Приложение C и приложение C++ вложены в один и тот же каталог верхнего уровня и используют тот же файл wscript для настройки компилятора. Оба приложения компилируются с использованием -Og и -g. Что может помешать записи исходного пути в раздел отладки файла ELF?
Соответствующие разделы wscript:Сценарий верхнего уровня
Код: Выделить всё
def build(bld):
rtems.build(bld)
bld.env.CFLAGS += ['-Og','-g']
Код: Выделить всё
def build(bld):
# Create include path nodes
board_inc = bld.root.find_node('/home/kyle/rtems-core/rtems/bsps/arm/atsam/contrib/libraries/libboard/')
chip_inc = bld.root.find_node('/home/kyle/rtems-core/rtems/bsps/arm/atsam/include/libchip/')
component_inc = bld.root.find_node('/home/kyle/rtems-core/rtems/bsps/arm/atsam/include/libchip/include/samv71/component/')
print(chip_inc.abspath())
rtems.build(bld)
bld(features = 'cxx cxxprogram',
target = 'timerpp.exe',
source = ['init.cpp'],
includes = ['.', board_inc, chip_inc, component_inc])
Код: Выделить всё
: Abbrev Number: 57 (DW_TAG_compile_unit)
DW_AT_producer : (indirect string, offset: 0x939): GNU C17 13.2.1 20240412 (RTEMS 6, RSB 89172ba5819a12ea22f49a134008e949daae6c94, Newlib 176b19f) -ftls-model=local-exec -mthumb -mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -march=armv7e-m+fp.dp -g -Og
DW_AT_language : 29 (C11)
DW_AT_name : (indirect string, offset: 0x760): ../../led/timer/init.c
DW_AT_comp_dir : (indirect string, offset: 0x2a93): /home/kyle/rtems-core/rtems-examples/build/arm-rtems6-atsamv
Код: Выделить всё
: Abbrev Number: 51 (DW_TAG_compile_unit)
DW_AT_producer : (indirect string, offset: 0x914): GNU C17 13.2.1 20240412 (RTEMS 6, RSB 89172ba5819a12ea22f49a134008e949daae6c94, Newlib 176b19f) -ftls-model=local-exec -mthumb -mcpu=cortex-m7 -mfloat-abi=hard -march=armv7e-m+fp.dp -g -g -g -O2 -O2 -O2 -fbuilding-libgcc -fno-stack-protector -fno-inline -fexceptions -fvisibility=hidden
DW_AT_language : 29 (C11)
DW_AT_name : (indirect string, offset: 0x227): ../../../../../../gnu-mirror-gcc-54a235e/libgcc/config/arm/unwind-arm.c
DW_AT_comp_dir : (indirect string, offset: 0x69): /home/kyle/rtems-core/rtems-source-builder/rtems/build/arm-rtems6-gcc-54a235e-newlib-176b19f-x86_64-linux-gnu-1/build/arm-rtems6/thumb/cortex-m7/hard/libgcc
Код: Выделить всё
g++
Код: Выделить всё
15:33:09 deps scanner for kyle/shell/init.c: []; unresolved: []
{task 139852547300640: c init.c -> init.c.1.o} must run: it was never run before or the task code changed
[10/84] Compiling kyle/shell/init.c
15:33:09 runner ['/home/kyle/rtems-core/tools/bin/arm-rtems6-gcc', '-mthumb', '-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard', '-isystem/home/kyle/rtems-core/bsp-install/arm-rtems6/atsamv/lib/include', '-MMD', '-Og', '-g', '-Ikyle/shell', '-I../../kyle/shell', '-I../../../rtems/bsps/arm/atsam/contrib/libraries/libboard', '-I../../../rtems/bsps/arm/atsam/include/libchip', '-I../../../rtems/bsps/arm/atsam/include/libchip/include/samv71/component', '-DBOARD_SAMV71_XULT=1', '../../kyle/shell/init.c', '-c', '-o/home/kyle/rtems-core/rtems-examples/build/arm-rtems6-atsamv/kyle/shell/init.c.1.o']
15:33:09 deps scanner for kyle/timerpp/init.cpp: []; unresolved: []
{task 139852547300976: cxx init.cpp -> init.cpp.1.o} must run: it was never run before or the task code changed
[11/84] Compiling kyle/timerpp/init.cpp
15:33:09 runner ['/home/kyle/rtems-core/tools/bin/arm-rtems6-g++', '-mthumb', '-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard', '-isystem/home/kyle/rtems-core/bsp-install/arm-rtems6/atsamv/lib/include', '-MMD', '-Ikyle/timerpp', '-I../../kyle/timerpp', '-I../../../rtems/bsps/arm/atsam/contrib/libraries/libboard', '-I../../../rtems/bsps/arm/atsam/include/libchip', '-I../../../rtems/bsps/arm/atsam/include/libchip/include/samv71/component', '-DBOARD_SAMV71_XULT=1', '../../kyle/timerpp/init.cpp', '-c', '-o/home/kyle/rtems-core/rtems-examples/build/arm-rtems6-atsamv/kyle/timerpp/init.cpp.1.o']
15:33:09 deps scanner for led/timer/init.c: []; unresolved: []
{task 139852547301536: c init.c -> init.c.1.o} must run: it was never run before or the task code changed
[12/84] Compiling led/timer/init.c
15:33:09 runner ['/home/kyle/rtems-core/tools/bin/arm-rtems6-gcc', '-mthumb', '-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard', '-isystem/home/kyle/rtems-core/bsp-install/arm-rtems6/atsamv/lib/include', '-MMD', '-Og', '-g', '-Iled/timer', '-I../../led/timer', '-I../../../rtems/bsps/arm/atsam/contrib/libraries/libboard', '-I../../../rtems/bsps/arm/atsam/include/libchip', '-I../../../rtems/bsps/arm/atsam/include/libchip/include/samv71/component', '-DBOARD_SAMV71_XULT=1', '../../led/timer/init.c', '-c', '-o/home/kyle/rtems-core/rtems-examples/build/arm-rtems6-atsamv/led/timer/init.c.1.o']
Глядя на другую программу на C, которую я создал в своем личном каталоге, [10/84] Компиляция kyle/shell/init.c, также видно, что флаги передаются правильно.Но когда я пытаюсь скомпилировать программу на C++, как показано в [11/84] Компиляция kyle/timerpp/init.cpp, установленные мной флаги не передаются. Об этом также свидетельствует приведенный выше objdump, показывающий разные флаги и не включающий путь к файлу init.cpp.
Что может вызвать waf передать определенные мной флаги программе C, но не программе C++? И что заставляет g++ не включать путь к исходному файлу в разделы отладки файла ELF?
Подробнее здесь: https://stackoverflow.com/questions/786 ... ug-section