Patrząc na this question i this question Widzę, że dla backtrace_symbols()
do pracy, należy skompilować z flagą -rdynamic
.backtrace_symbols() z zarówno -static i -rdynamic
Próbowałem go do programu testowego i to działa, ale piszę program, który jest również skompilowany z -static
i this page mówi, że backtrace_symbols()
nie działa, gdy -static
jest przekazywane do kompilator/linker.
Czy jest to szybkie obejście tego problemu, czy też nigdy nie będę posiadał czytelnej dla człowieka funkcji śledzenia w moim statycznie powiązanym programie?
Tak, '-static' jest obowiązkowe w moim programie. Próbowałem również z 'libunwind' ale moje przykładowe programy nie łączą się zarówno w Ubuntu 12.04 x86 jak i x86_64. Ja zawsze otrzymuję błędy łączące takie jak: 'nieokreślonej odniesieniu do _Ux86_init_local' ' niezdefiniowanej odniesienie do _Ux86_get_reg' 'niezdefiniowanej odniesienie do _Ux86_get_proc_name' ' niezdefiniowanej odniesienie do _Ux86_step' zarówno z binarnym libunwind Ubuntu i ostatni self-kompilowane libunwind pobranych od [tutaj] (http://download.savannah.gnu.org/releases/libunwind/). – Avio
@Avio Wspomniałem 'libdwarf', a nie' libunwind'. Nie miałem żadnych problemów z linkami do 'libunwind'a – qrdl
Spróbuję' libdwarf' jak najszybciej. Właśnie wspomniałem o "libunwind", ponieważ może to być kolejna interesująca alternatywa bez specjalnych wymagań. Jaką architekturę/dystrybucję używasz, z powodzeniem połączoną z 'libunwind'? – Avio