Почему статически связанный исполняемый файл не отображает детали трассировки стека изнутри архива? Сначала я подумал, что это связано с тем, что для связывания исполняемого файла на самом деле не нужен символ Internal_doit(), поэтому он удаляется. Однако добавление -Wl,--whole-archive не устранило проблему.
Почему динамически связанный исполняемый файл не отображает детали трассировки стека для кадра Internal_doit()? Код создан с использованием -O0, поэтому оптимизаций быть не должно.
g++ -shared -o libdoit.so doit.o g++ -g -O0 main.cpp -L. -ldoit -o dynamic -Wl,-rpath=. ./dynamic [/code] При запуске в системе Linux (в моем случае Debian 12) результат [code]+ g++ -g -O0 -fPIC -c ./doit.cpp -o doit.o + ar rv libdoit.a doit.o ar: creating libdoit.a a - doit.o + g++ -g -O0 main.cpp -L. -Wl,--whole-archive -ldoit -Wl,--no-whole-archive -o static + rm libdoit.a + ./static ========== Stack Trace ========== #0 0x55bb788ea1b2 + 0x0 (./static) #1 0x55bb788ea1be + 0x0 (./static) #2 0x55bb788ea1a2 + 0x0 (./static) #3 0x7f074891224a + 0x0 (/lib/x86_64-linux-gnu/libc.so.6) #4 0x7f0748912305 __libc_start_main + 0x85 (/lib/x86_64-linux-gnu/libc.so.6) #5 0x55bb788ea0d1 + 0x0 (./static) ==================================== + g++ -shared -o libdoit.so doit.o + g++ -g -O0 main.cpp -L. -ldoit -o dynamic -Wl,-rpath=. + ./dynamic ========== Stack Trace ========== #0 0x7f86d2324182 + 0x0 (./libdoit.so) #1 0x7f86d232418e doit() + 0x9 (./libdoit.so) #2 0x55afae550142 + 0x0 (./dynamic) #3 0x7f86d216124a + 0x0 (/lib/x86_64-linux-gnu/libc.so.6) #4 0x7f86d2161305 __libc_start_main + 0x85 (/lib/x86_64-linux-gnu/libc.so.6) #5 0x55afae550071 + 0x0 (./dynamic) ==================================== [/code] Вопросы [list] [*]Почему статически связанный исполняемый файл не отображает детали трассировки стека изнутри архива? Сначала я подумал, что это связано с тем, что для связывания исполняемого файла на самом деле не нужен символ Internal_doit(), поэтому он удаляется. Однако добавление -Wl,--whole-archive не устранило проблему.
[*]Почему динамически связанный исполняемый файл не отображает детали трассировки стека для кадра Internal_doit()? Код создан с использованием -O0, поэтому оптимизаций быть не должно.
[/list] Исходный код [list] [*]main.cpp [code]#include "doit.h" int main() { doit(); return 0; } [/code]