Nhìn vào this question và this question Tôi có thể thấy rằng đối với backtrace_symbols()
để hoạt động, người ta phải biên dịch với cờ -rdynamic
.backtrace_symbols() với cả hai -static và -rdynamic
Tôi đã thử nó vào một chương trình thử nghiệm và nó hoạt động, nhưng tôi đang viết một chương trình mà cũng được biên soạn với -static
và this page nói rằng backtrace_symbols()
không hoạt động khi -static
được truyền cho các trình biên dịch/mối liên kết.
Có cách giải quyết nhanh nào cho vấn đề này hoặc tôi sẽ không bao giờ có chức năng backtrace có thể đọc được trong chương trình được liên kết tĩnh của tôi không?
Có, '-static' là bắt buộc trong chương trình của tôi. Tôi cũng đã thử với 'libunwind' nhưng các chương trình ví dụ của tôi không liên kết cả trên Ubuntu 12.04 x86 và x86_64. Tôi luôn nhận được các lỗi liên kết như: 'undefined reference to _Ux86_init_local' ' undefined reference to _Ux86_get_reg' 'undefined reference to _Ux86_get_proc_name' ' undefined reference to _Ux86_step' cả với libunwind Ubuntu nhị phân và libunwind tự biên dịch mới nhất tải xuống [ở đây] (http://download.savannah.gnu.org/releases/libunwind/). – Avio
@Avio Tôi đã đề cập đến 'libdwarf', không phải là' libunwind'. Tôi không gặp vấn đề gì khi liên kết với 'libunwind' – qrdl
Tôi sẽ thử' libdwarf' càng sớm càng tốt. Tôi đã đề cập đến 'libunwind' vì nó có thể là một lựa chọn thú vị khác mà không cần bất kỳ yêu cầu đặc biệt nào. Kiến trúc/phân phối nào bạn sử dụng whan bạn đã liên kết thành công với 'libunwind'? – Avio